반응형
개요
Spring Data JPA 를 사용한다면, 보통 Repository 인터페이스는 다음과 같을 것이다
import org.springframework.data.jpa.repository.JpaRepository;
public interface MemberRepository extends JpaRepository<Member, String> {
// ...
}
위의 코드만 봤을 때는, MemberRepository가 @Repository 어노테이션 없이 어떻게 Bean을 등록되는 지 알 수 없다.
JpARepository 내부 구현 코드를 들어가봐도 Bean 으로 등록해주는 코드는 존재하지 않았다.
이 궁금증을 시작으로 찾아보게 되었다.
@EnableJpaRepositories
- 이 어노테이션은 JPA Repository 들을 활성화하기 위한 어노테이션이다.
- Spring : @Configuration 클래스에서 @EnableJpaRepositories 어노테이션을 사용한다.
- SprintBoot : @EnableJpaRepositories 가 자동설정이 돼서 생략해도 된다.
@Configuration
@EnableJpaRepositories(basePackages = "kr.co.haenny")
publc JpaConfiguration {
// ...
}
내부 코드 확인
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(JpaRepositoriesRegistrar.class)
public @interface EnableJpaRepositories {
// ...
}
@Import(JpaRepositoriesRegistrar.class)
- JpaRepository 를 상속받은 모든 인터페이스를 Bean 으로 등록해준다.
- ImportBeanDefinitionRegistrar 인터페이스의 구현체라고 볼 수 있으며 JpaRepositoriesRegistrar 와 ImportBeanDefinitionRegistrar 는 Spring 에서 제공하는 클래스이다.
참고로 ImportBeanDifinitionRegistrar 인터페이스는 BeanDefinition 을 정의할 수 있는 인터페이스로, ImportBeanDifinitionRegistrar를 이용해 빈으로 등록할 수 있다.
728x90
반응형
'JVM > JPA' 카테고리의 다른 글
[JPA] N+1 발생 원인과 해결책 (3) | 2023.05.30 |
---|---|
[JPA] QueryDSL 소개 및 프로젝트 설정하기 (0) | 2023.05.25 |
[JPA] 기본 키 전략과 Entity Custom ID Generator 구현하기 (0) | 2022.08.05 |
[JPA] SpringBoot JPA 쿼리 로그 설정하기 (0) | 2022.07.27 |
댓글