2017-02-15 1 views
1

스프링 4.3.0을 사용하는 라이브러리를 생성 중입니다. 스프링 부트 애플리케이션의 하나가이 라이브러리를 소비합니다. 현재 @ComponentScan 봄 부팅 응용 프로그램의 기본 클래스 대신 라이브러리 안의 빈을 검색하려면 사용하고 있습니다. 자동 구성하려면 원하는. 그래서 내가 라이브러리 내부의 구성 클래스를 만들고 구성에서 @ComponentScan 선언했습니다. 파일.스프링 부트 애플리케이션에 자동 구성 스프링 라이브러리 생성

봄 부팅 응용 프로그램에서 라이브러리를 소모 한 후에는

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.sample.book.client.service.BookService] found for dependency [com.sample.book.client.service.BookService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) 
... 33 common frames omitted 

방법이 오류를 해결하기 위해, 라이브러리 내부의 콩을 스캔하고 발생되지 않는 이유는 무엇입니까? @Configuration 전에 @service 클래스를 검사하는 이유는 무엇입니까?

도움이 필요하며 필요한 경우 코드 샘플을 제공해 드리겠습니다.

답변

1

귀하의 설정이 부팅 응용 프로그램에서 기본적으로로드되지 않은 것 같습니다. 또한 추가하지 않았 음을 짐작합니다.

@EnableAutoConfiguration 

을 부팅 응용 프로그램에 추가 한 것 같습니다.

어노테이션 @EnableAutoConfiguration에 구성을 추가하여 응용 프로그램에서로드 할 수 있습니다. 그런 다음 라이브러리 -JAR 내에 META-INF/spring.factories에 넣은 구성이 자동으로로드됩니다.

또는 당신이 당신의 @SpringBootApplication 클래스의 구성을 @Import 수는

+0

어떻게 다음과 같은 "org.springframework.boot.autoconfigure.EnableAutoConfiguration"가져 오기와 함께 자동 구성을 지정할 수 있습니까? "EnableAutoConfiguration"은 스프링 부트에 의해 제공됩니다. 스프링이 잘못 되었으면 수정하십시오. – VelNaga

+1

앱이 allready @ SpringBootApplication이면 자동 구성이 활성화됩니다. 그런 다음 META-INF/spring-factories를 라이브러리 JAR에 넣거나 라이브러리 구성을 가져올 수 있습니다. –

+0

작동합니다. 감사합니다. 나는 META-INF/spring.factories 메서드를 따르고 매력적으로 작동하지만 @Import를 정의 해 주시겠습니까? 아니면 "@Import"에 대한 링크를 공유 할 수 있습니까? – VelNaga

2

가장 가능성이 높은 원인은 라이브러리가 당신의 봄 부팅 응용 프로그램 (및 서브 패키지)과는 다른 패키지에있는 것입니다 그 날 것으로 보인다. @SpringBootApplication을 사용하여 클래스에 주석을 추가 할 때 @ComponentScan 주석을 기본값 (즉, 주어진 클래스가 상주하는 패키지의 구성 요소를 스캔하는 것)으로 설정합니다.

저는 개인적으로 제 라이브러리 프로젝트에 @Configuration 주석이 달린 클래스를 만드는 것을 선호합니다. 이러한 클래스는 적절한 라이브러리 설정 (구성 요소 검사 선언 등)을 담당합니다. 나중에 종속 프로젝트에서 @Import 주석을 사용하여 해당 구성 클래스 (및 해당 빈)를 가져옵니다.

0
@Import({MailServiceConfig.class, ServiceConfig.class}) 

은 특정 구성을 활성화하는 데 사용할 수 있습니다.

내 봄 부팅 응용 프로그램은 이미 내 도서관 봄 부팅을하지 봄을 사용하고 있으므로, @SpringBootApplication 그래서 다시 SpringBootApplication는 "META-INF/spring.factories"를 지정한 redundant.Also 것 선언의 주석을 붙일 수

http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s03.html

관련 문제