복붙노트

[SPRING] Spring Boot, @Configurable을 사용하여 관리되지 않는 클래스에 @Autowire로드 및 시간 짜기

SPRING

Spring Boot, @Configurable을 사용하여 관리되지 않는 클래스에 @Autowire로드 및 시간 짜기

Spring 외부에서 인스턴스화 된 관리되지 않는 클래스의 콜렉션이 있습니다. 나는로드 시간과 함께 Spring AOP를 사용하여 @ 클래스에 빈을 넣으려고 시도했지만, 지금까지 아무런 운이 없었습니다.

나는 Tomcat 8과 Spring Boot 1.2.0을 사용하여 테스트를 해왔다.

클래스를 설정하려고하는 @Configuration은 다음과 같습니다.

@Configuration
@PropertySource("classpath:application.properties")
@EnableSpringConfigured
@EnableLoadTimeWeaving
public class Config

내부 구성 @Auotwire로 묶고 싶은 bean을 관리되지 않는 클래스로 정의합니다 :

@Bean
public StateProvider stateProvider() {
    //setup bean
    return new DynamoStateProviderImpl( );
}

관리되지 않는 bean은 다음과 같습니다.

@Configurable(autowire = Autowire.BY_TYPE, dependencyCheck = true,   preConstruction = true)
public class StateOutput implements UnifiedOutput {

@Autowired
private StateProvider stateProvider;

그리고 나는 다음과 같은 deps가 내 pom 안에있다.

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-agent</artifactId>
        <version>2.5.6.SEC03</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
    </dependency>

지금까지 stateProvider에 주입 된 것을 볼 수 없었거나 로그에서 정보를 가져올 수 없었습니다. 나는 또한 setter 스타일 주입을 시도했다.

@Autowired
public void setStateProvider(StateProvider stateProvider){
    this.stateProvider = stateProvider;
}

감사

해결법

  1. ==============================

    1.LTW를 측정하려면 javaagent를 사용하거나 \ lib 폴더에 spring-tomcat-weaver.jar을두고 context.xml에 TomcatInstrumentableClassLoader를 설정해야합니다.

    LTW를 측정하려면 javaagent를 사용하거나 \ lib 폴더에 spring-tomcat-weaver.jar을두고 context.xml에 TomcatInstrumentableClassLoader를 설정해야합니다.

    javaagent 예제 :

    -javaagent:"${settings.localRepository}/org/springframework/spring-agent/2.5.6.SEC03/spring-agent-2.5.6.SEC03".jar
    

    ClassLoader 예제 :

    <Context>
        <Loader loaderClass="org.springframework.instrument.classl oading.tomcat.TomcatInstrumentableClassLoader" />
    </Context>
    
  2. from https://stackoverflow.com/questions/29167500/spring-boot-autowire-into-an-unmanaged-class-using-configurable-and-load-time by cc-by-sa and MIT license