주석은 repo 인터페이스의 기준과 실제로 일치하지만 의도적이지 않은 인터페이스에 대한 저장소 프록시를 작성하는 것을 피하기 위해 사용됩니다. 기능으로 모든 저장소를 확장하기 시작하면 필요합니다. 예를 들어 보겠습니다.
모든 저장소에 foo() 메소드를 추가한다고 가정합니다. 다음과 같은 repo 인터페이스를 추가하면됩니다.
public interface com.foobar.MyBaseInterface<…,…> extends CrudRepository<…,…> {
void foo();
}
구현 클래스, 팩토리 등을 추가 할 수도 있습니다.
<jpa:repositories base-package="com.foobar" />
를 동일한 패키지에 CustomerRepository
을 가지고 있기 때문에 당신은 com.foobar
를 사용 : - -의 스프링 데이터 JPA를 가정 해 봅시다 다음과 같이
public interface com.foobar.CustomerRepository extends MyBaseInterface<Customer, Long> {
}
은 이제 부트 스트랩 가정 : 당신 콘크리트 저장소 인터페이스는 지금 중간 인터페이스를 확장 할 . 스프링 데이터 인프라는 이제 MyBaseRepository
이 구체적인 저장소 인터페이스가 아니라 추가 방법을 노출하기위한 중간 저장소 역할을한다는 것을 알 수있는 방법이 없습니다. 따라서 저장소 프록시 인스턴스를 만들고 실패하게됩니다. 이제 @NoRepositoryBean
을 사용하여이 중간 인터페이스에 주석을 달아 봄 데이터를 알릴 수 있습니다.이 인터페이스에 대한 리포지토리 프록시 bean을 만들지 마십시오.
CrudRepository
및 PagingAndSortingRepository
도이 주석을 포함하는 이유이기도합니다. 우연히 패키지 스캔이 우연히 그 패키지를 선택한다면 (우연히 이런 식으로 구성했기 때문에) 부트 스트랩이 실패합니다.
짧은 설명 : 주석을 사용하여 리포지토리 인터페이스가 결국 리포지토리 빈 인스턴스로 끝날 수있는 후보로 선택되지 않도록합니다.
올리버 (Oliver)의 설명에 감사드립니다. – balteo
슈퍼 대답. 고맙습니다. – ozgur
잘 설명 된 대답. – Mukti