SimpleJpaRepostory 내부 뜯어보기
1. Spring Data JPA
- JPA를 쓰기 편하게 만들어놓은 모듈이다.
→ 위와 같이 Repository 인터페이스가 Spring Data JPA 내부에 존재한다.
위와 같이 JpaRepository는 ListCrudRepository를 상속하고,
ListCrudRepository는 CrudRepository를 상속하고,
CrudRepository는 Repository를 상속한다.
상속 관계 : Repository > CrudRepository > ListCrudRepository > JpaRepository
예를 들어, Repository 인터페이스의 기본 구현체인 SimpleJpaRepository의 코드를 보자.
SimpleJpaRepository는 JpaRepositoryImplementation를 상속하고,
JpaRepositoryImplementation는 JpaRepository를 상속한다.
아래와 같이 내부적으로 EntityManager을 사용하고 있는 것을 볼 수 있다.
CrudRepository 인터페이스 내에 선언되어 있는 save(), delete(), findById() 등을
SimpleJpaRepository에서 구현하여 사용할 수 있는 것이다.
또한,
Repository 인터페이스를 구현한 구현체인 SimpleJpaRepository 내에 @Repostiory
어노테이션이 달려있기 때문에 스프링 내부에 Bean으로 수동 등록된다.
그렇기 때문에 JpaRepository를 상속하여 구현한 PostRepository를
빈으로 자동 등록되고, 이를 통해 위에 메서드들을 사용할 수 있다.
JpaRepository나 CrudRepository가 아닌 Repository를 상속해서 더 깔끔한 시스템 설계를 만들 수 있다.
reference :
https://jaehoney.tistory.com/250