[SPRING] 종속 라이브러리 Jar에있는 Bean을 @Autowire 할 수 없습니까?
SPRING종속 라이브러리 Jar에있는 Bean을 @Autowire 할 수 없습니까?
X.jar로 압축 된 라이브러리 파일 집합에 의존하고 응용 프로그램 Y의 pom.xml에서 종속성으로 언급 한 스프링 부트 응용 프로그램 (Y)이 있습니다.
x.jar에는 (User.java)라는 이름의 bean이있다. 응용 프로그램 Y에는 (Department.java)라는 Java 클래스가 있습니다.
Department.java에서 User.java의 인스턴스를 Autowire하려고 시도하는 동안 다음 오류가 발생합니다.
종속 라이브러리 Jar에있는 Bean을 @Autowire 할 수 없습니까?
여기에 스프링 부트 애플리케이션 'Y'의 코드가있다.
package myapp;
@Component
public class Department {
@Autowired
private com.User user;
//has getter setters for user
}
다음은 Library x.jar에있는 User.java 코드입니다.
package com;
@Component
@ConfigurationProperties(prefix = "test.userproperties")
public class User {
private String name;
//has getter setters for name
}
응용 프로그램 Y의 pom.xml에서 x.jar에 대한 종속 항목입니다.
<groupId>com.Lib</groupId>
<artifactId>x</artifactId>
<version>001</version>
</dependency>
이것은 'Y'응용 프로그램의 Main 클래스입니다.
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
부서와 사용자 모두 다른 패키지를 사용합니다.
솔루션 : 다음 두 단계를 적용했는데 이제 Autowiring이 정상적으로 작동합니다.
1 단계 : jar 파일에 다음 클래스 추가
package com
@Configuration
@ComponentScan
public class XConfiguration {
}
2 단계 : Y 프로젝트의 메인 클래스에서이 Configuration 클래스를 가져 왔습니다.
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
@Import(XConfiguration.class)
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
해결법
-
==============================
1.메인 클래스와 User 클래스의 패키지 이름을 100 % 확실하게 추가해야하지만 User 클래스는 기본 클래스의 동일한 패키지 (또는 서브 패키지)에 있지 않을 가능성이 높습니다. 즉, 구성 요소 검색이 인식하지 못합니다.
메인 클래스와 User 클래스의 패키지 이름을 100 % 확실하게 추가해야하지만 User 클래스는 기본 클래스의 동일한 패키지 (또는 서브 패키지)에 있지 않을 가능성이 높습니다. 즉, 구성 요소 검색이 인식하지 못합니다.
스프링이 다음과 같은 다른 패키지를 보도록 강제 할 수 있습니다 :
@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})
from https://stackoverflow.com/questions/30796306/cant-i-autowire-a-bean-which-is-present-in-a-dependent-library-jar by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 타입 검증을 가진 Spring getBean (0) | 2019.04.04 |
---|---|
[SPRING] 특정 클래스 로더와 함께 Spring 컨텍스트로드하기 (0) | 2019.04.04 |
[SPRING] Spring과 Hibernate는 갑자기 트랜잭션을 읽기 전용으로 설정했다. (0) | 2019.04.04 |
[SPRING] XML 스키마 네임 스페이스 용 Spring NamespaceHandler를 찾을 수 없음 [http://cxf.apache.org/jaxrs] (0) | 2019.04.04 |
[SPRING] 스프링의 자동 구성 재 초기화 (0) | 2019.04.04 |