[SPRING] 스프링 데이터의 이해 JPA @NoRepositoryBean 인터페이스
SPRING스프링 데이터의 이해 JPA @NoRepositoryBean 인터페이스
스프링 데이터 문서를 읽는 동안 @NoRepositoryBean 인터페이스가 여러 번 발생했습니다.
설명서에서 인용하려면 다음을 수행하십시오.
그러나, 나는 아직도 그것을 언제 어디에서 사용할 지 확신하지 못한다. 누군가 제게 구체적인 사용 예를 알려주고 조언 해 줄 수 있습니까?
해결법
-
==============================
1.이 주석은 repo 인터페이스의 기준과 실제로 일치하지만 의도적이지 않은 인터페이스에 대한 저장소 프록시 생성을 피하기 위해 사용됩니다. 기능을 사용하여 모든 저장소를 확장하기 시작하면 필요합니다. 내가 한 가지 예를 들어 보겠다.
이 주석은 repo 인터페이스의 기준과 실제로 일치하지만 의도적이지 않은 인터페이스에 대한 저장소 프록시 생성을 피하기 위해 사용됩니다. 기능을 사용하여 모든 저장소를 확장하기 시작하면 필요합니다. 내가 한 가지 예를 들어 보겠다.
모든 저장소에 foo () 메소드를 추가하려고한다고 가정하십시오. 다음과 같이 repo 인터페이스를 추가하면됩니다.
public interface com.foobar.MyBaseInterface<…,…> extends CrudRepository<…,…> { void foo(); }
또한 구현 클래스, 팩토리 등을 추가 할 수 있습니다. 구체적인 저장소 인터페이스는 이제 해당 중간 인터페이스를 확장합니다.
public interface com.foobar.CustomerRepository extends MyBaseInterface<Customer, Long> { }
이제 스프링 데이터 JPA를 부트 스트랩으로 가정 해 봅시다.
<jpa:repositories base-package="com.foobar" />
동일한 패키지에 CustomerRepository가 있으므로 com.foobar를 사용합니다. Spring 데이터 인프라 스트럭처는 이제 MyBaseRepository가 구체적인 저장소 인터페이스가 아니라 오히려 추가 메쏘드를 노출하기위한 중간 레포 역할을한다는 것을 알 수있는 방법이 없습니다. 따라서 저장소 프록시 인스턴스를 만들어 실패를 시도합니다. @NoRepositoryBean을 사용하여이 중간 인터페이스에 주석을 달아 스프링 데이터를 본질적으로 알릴 수 있습니다.이 인터페이스에 대한 리포지토리 프록시 bean을 만들지 마십시오.
이 시나리오는 CrudRepository와 PagingAndSortingRepository가이 주석을 전달하는 이유이기도합니다. 우연히 패키지 스캔이 우연히 발견되면 (우연히이 방법으로 구성했기 때문에) 부트 스트랩이 실패합니다.
간단히 설명하면, 어노테이션을 사용하면 저장소 인터페이스가 저장소 빈 인스턴스로 끝날 수있는 후보로 선택되지 않도록 할 수 있습니다.
from https://stackoverflow.com/questions/11576831/understanding-the-spring-data-jpa-norepositorybean-interface by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] persistence.xml과 스프링 설정 파일의 데이터 소스 설정의 차이점 (0) | 2019.01.27 |
---|---|
[SPRING] 거기에 예외가 발생하지 않고 트랜잭션 롤백을 강제하는 방법이 있습니까? (0) | 2019.01.27 |
[SPRING] Java로 메일 첨부 파일 다운로드 (0) | 2019.01.27 |
[SPRING] 스프링 빈 설정 파일은 Maven WAR 모듈에서 어디로 이동합니까? (0) | 2019.01.27 |
[SPRING] Spring 부트의 application.properties에서 Maven 속성 사용하기 (0) | 2019.01.27 |