복붙노트

[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. ==============================

    1.메인 클래스와 User 클래스의 패키지 이름을 100 % 확실하게 추가해야하지만 User 클래스는 기본 클래스의 동일한 패키지 (또는 서브 패키지)에 있지 않을 가능성이 높습니다. 즉, 구성 요소 검색이 인식하지 못합니다.

    메인 클래스와 User 클래스의 패키지 이름을 100 % 확실하게 추가해야하지만 User 클래스는 기본 클래스의 동일한 패키지 (또는 서브 패키지)에 있지 않을 가능성이 높습니다. 즉, 구성 요소 검색이 인식하지 못합니다.

    스프링이 다음과 같은 다른 패키지를 보도록 강제 할 수 있습니다 :

    @ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})
    
  2. 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