2014-06-16 1 views
2

주석을 사용하여 Boot를 사용하여 매우 작은 Spring/REST/JPA 프로젝트를 설정하고 있습니다.ComponentScan의 주문이 중요합니까?

JPA 저장소 클래스를 다른 패키지로 이동하고 해당 패키지에서 componentscan을 호출 할 때 Autowired 저장소 변수가있는 REST 컨트롤러 클래스에서 Bean을 찾을 수 없습니다. 그러나 모든 파일 (총 5 개)이 같은 패키지에 들어 있으면 모든 것이 잘 작동하고있었습니다.

그래서 구성 요소 스캔 순서가 중요한지 궁금했습니다. 예를 들어, 클래스가 아직 '구성 요소 검사'되지 않은 패키지에서 일부 Bean을 AutoWiring하는 경우 Bean을 찾을 수없는 오류가 발생합니까?

+0

번호 봄은 모든 빈을로드 한 다음 배선을 수행합니다. –

+0

@Evgeni 감사합니다. – JeffLL

답변

0

아니요, 모든 구성 정보를로드 한 다음 가능하면 콩을 만든 다음 다른 모든 것이 정렬 될 때 함께 연결합니다. 시작할 때 모든 설정을 읽었을 것입니다.

2

어쩌면 코드를 공유해야 할 수도 있습니다. 그 물건을 옮길 때 Spring에게 그들이 어디로 갔는지 알려줄 필요가 있습니다. 내 생각 엔 @EntityScan@EnableJpaRepositories (기본값은 @EnableAutoConfiguration)을 정의하지 않았을 것입니다.

+0

아, 그걸 몰랐습니다. 감사합니다. – JeffLL

1

몇 가지 문제가있을 수 있습니다 :

  • 당신은 당신이 인수없이 @ComponentScan 가지고있는 일부 패키지에서 클래스를 옮겼습니다. 이는 기본적으로 구성 요소가이 패키지와 하위 패키지에서만 스캔됨을 의미합니다. 따라서, 이동 된 클래스는 스캔되지 않으며 연결할 빈이 없습니다.
  • @ComponentScan args에 잘못된 패키지 이름이 있습니다.

순서는 중요하지 않습니다. @Order 주석이 있지만 sth의 여러 구현을 다른 순서로로드하는 것이 목적입니다. 처음에는 빈 정의가 작성되었으며 배선과 관련이 없습니다. 그런 다음 빈 포스트 프로세서를 통해 autowired 빈을 주입합니다. bean 정의가 없었기 때문에. 주입 할 것이 없습니다.