1. @Repository를 사용하지 않아도 된다.
흔히 JPA를 사용하면 아래와 같이 사용합니다.
public interface User extends JpaRepository<User, Long> {
}
위 그림과 같이 @Reposotory를 사용하지 않아도 됩니다.
왜 일까요?
상속받은 JpaReposotory에 @Component가 있는 것일까요?
확인해 보면 @NoRepositoryBean이 설정되어 있어 빈으로 등록하지 않는다는 것을 알 수 있습니다.
2. @EnableJpaRepositories
JPA를 빈으로 등록하기 위해서는 @EnableJpaRepositories를 사용해야 합니다.
단, Spring Boot는 자동으로 @EnableJpaRepositories를 설정하기 때문에 명시를 하지 않아도 되는 것입니다.
@EnableJpaRepositories는 아래와 같이 정의되어 있습니다.
애노테이션 맨 마지막에 있는 JpaRepositoriesRegistrar를 확인해보면 아래와 같습니다.
JpaRepositoriesRegistrar은 RepositoryBeanDefinitionRegistrarSupport를 상속받고 있고, RepositoryBeanDefinitionRegistrarSupport는 ImportBeanDefinitionRegistrar의 구현체입니다.
이름에서 알 수 있듯이, 해당 클래스들로 빈을 정의하고 있어 따로 빈으로 등록하지 않아도 되는 것입니다.
해당 정의된 빈은 @SpringBootApplication의 @ComponentScan에 의해 빈으로 등록 됩니다.