본문 바로가기

삽질

[Spring Boot] JPA 빈 등록

1. @Repository를 사용하지 않아도 된다.

흔히 JPA를 사용하면 아래와 같이 사용합니다.

public interface User extends JpaRepository<User, Long> {
}

 

위 그림과 같이 @Reposotory를 사용하지 않아도 됩니다.

 

왜 일까요?

 

상속받은 JpaReposotory@Component가 있는 것일까요?

확인해 보면 @NoRepositoryBean이 설정되어 있어 빈으로 등록하지 않는다는 것을 알 수 있습니다.

💡 https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/NoRepositoryBean.html

 

2. @EnableJpaRepositories

JPA를 빈으로 등록하기 위해서는 @EnableJpaRepositories를 사용해야 합니다.

단, Spring Boot는 자동으로 @EnableJpaRepositories를 설정하기 때문에 명시를 하지 않아도 되는 것입니다.

 

 

@EnableJpaRepositories는 아래와 같이 정의되어 있습니다.

 

애노테이션 맨 마지막에 있는 JpaRepositoriesRegistrar를 확인해보면 아래와 같습니다.

 

JpaRepositoriesRegistrar RepositoryBeanDefinitionRegistrarSupport를 상속받고 있고, RepositoryBeanDefinitionRegistrarSupportImportBeanDefinitionRegistrar의 구현체입니다.

 

이름에서 알 수 있듯이, 해당 클래스들로 빈을 정의하고 있어 따로 빈으로 등록하지 않아도 되는 것입니다.

 

해당 정의된 빈은 @SpringBootApplication의 @ComponentScan에 의해 빈으로 등록 됩니다.