我有一些非托管类的集合,这些类在Spring之外实例化。我一直在尝试使用Spring AOP,并将加载时间编织@Autowire到这些类中,但到目前为止还没有任何运气。
@Autowire
我一直在使用Tomcat 8和Spring Boot 1.2.0进行测试。
我@Configuration尝试设置课程的地方看起来像这样:
@Configuration
@Configuration @PropertySource("classpath:application.properties") @EnableSpringConfigured @EnableLoadTimeWeaving public class Config
在内部,Config我定义要@Auotwire进入非托管类的bean :
Config
@Auotwire
@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从日志中提取任何信息。我也尝试使用
stateProvider
@Autowired public void setStateProvider(StateProvider stateProvider){ this.stateProvider = stateProvider; }
谢谢
为了仪器LTW你要么需要使用javaagent或场所spring-tomcat- weaver.jar中\lib的文件夹,并设置TomcatInstrumentableClassLoader在context.xml。
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>