에 의해 anotated 클래스가 만들 무엇인가. 나는 실패했지만 이유는 확실하지 않았습니다. 그래서 비슷한 코드를 가진 또 다른 예제를 찾고 책을 보았습니다 "Craig Walls의 Action in Spring 4 판"봄 @ComponentScan 자동으로 할 수없는 것에 대한 원인은 내 유스 케이스를 피팅 할 듯를 구현 시도한 <a href="https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-eight-adding-functionality-to-a-repository/" rel="nofollow noreferrer">tutorial</a> 건너 온 @Repository
이 책은 300 페이지에서 동일한 기본 접근법을 설명합니다. JdbcTemplate Bean을 먼저 정의하십시오.
@Bean
NamedParameterJdbcTemplate jdbcTemplate(DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
그런 다음
@Repository
public class CustomRepositoryImpl implements CustomRepository {
private final NamedParameterJdbcOperations jdbcOperations;
private static final String TEST_STRING = "";
@Autowired
public CustomRepositoryImpl(NamedParameterJdbcOperations jdbcOperations) {
this.jdbcOperations = jdbcOperations;
}
그래서 나는이 책이 시사의 예제처럼 한 인터페이스를 구현하는 저장소는 테스트를 작성하지만 오류 메시지를 가지고 이름을 가진 bean을 생성
오류 'de.myproject.config.SpringJPAPerformanceConfigTest': 필드 'abc'를 통해 표현 된 충족되지 않은 종속성. 상자의 예외는 org.springframework.beans.factory.NoSuchBeanDefinitionException 없습니다 : 자동으로 묶어 후보 자격을 예상 적어도 1 콩 'de.myproject.CustomRepository'가능한 유형의 어떠한 자격 콩. 종속성 주석 : 책과 튜토리얼 설명과 같은 내 이해에
은 저장소가 구성 요소 스캔하여 Bean 정의로 인식되어야한다 {org.springframework.beans.factory.annotation.Autowired @는 (= TRUE 필수)} . 이 테스트하려면
가 나는 컨텍스트를 생성하고 등록 된 모든 콩에 대해 물었다.
AnnotationConfigApplicationContext
context = new AnnotationConfigApplicationContext();
context.getBeanDefinitionNames()
가정 내 저장소는 그 중 하나가 아닙니다. 그래서 테스트 목적으로 만 프로젝트의 검색 범위를 늘리고 기본 패키지로 설정했습니다. Repository를 제외한 다른 모든 Bean이 표시되었습니다. 구성 요소 검사 및 autowiring을하는 대신
, 책은 단순히 내가했던 콩,로 저장소를 선언 할 수있는 가능성에 대해 설명합니다.@Bean
public CustomRepository(NamedParameterJdbcOperations jdbcOperations) {
return new CustomRepositoryImpl(jdbcOperations);
}
그 후 Spring은 저장소를 연결할 수있었습니다. 나는이 책의 github code을 더 잘 이해하기를 희망했지만, 안타깝게도 실행되는 Bean 솔루션 만 구현되었다.
그래서 여기 내 질문이 있습니다 :
1)가 아닌 구성 요소에 의해 인식이 하나, 검사에게 같은 시나리오는 bean 정의를 위해 가능한 어떤 이유가 있습니까?
2)이 프로젝트는 이미 봄 JPA 데이터 저장소는 동시에 두 가지 접근 방식을 사용하지 않는 어떤 이유가 사용?
@ComponentScan 주석에서 알리고있는 패키지와 리포지토리가 하위 패키지에 있는지 확인할 수 있습니까? –
@ComponentScan (basePackages = { "de.myproject. *"}) 저장소가 하위 패키지 de.myproject.performance에 있으면 다른 하위 패키지의 다른 모든 bean이 있지만 어쩌면 몇 가지 특별한 규칙이 있습니다 @Repositorys를 위해 나는 모르고있다. – aldr