我有一组非托管类,我在Spring之外实例化。我一直试图使用Spring AOP将加载时间编织到@Autowire
一个bean进入这些类,但到目前为止还没有任何运气。
我一直在使用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中有以下deps
<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;
}
由于
答案 0 :(得分:3)
为了测试LTW,您需要使用javaagent或将spring-tomcat-weaver.jar
放在\lib
文件夹中,并在TomcatInstrumentableClassLoader
中设置context.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>