小编典典

Spring Boot,使用@Configurable和加载时间编织将@Autowire转换为非托管类

spring-boot

我有一些非托管类的集合,这些类在Spring之外实例化。我一直在尝试使用Spring
AOP,并将加载时间编织@Autowire到这些类中,但到目前为止还没有任何运气。

我一直在使用Tomcat 8和Spring Boot 1.2.0进行测试。

@Configuration尝试设置课程的地方看起来像这样:

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

在内部,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;

我的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从日志中提取任何信息。我也尝试使用

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

谢谢


阅读 572

收藏
2020-05-30

共1个答案

小编典典

为了仪器LTW你要么需要使用javaagent或场所spring-tomcat- weaver.jar\lib的文件夹,并设置TomcatInstrumentableClassLoadercontext.xml

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>
2020-05-30