我有一组在 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 中有以下部门
<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>
到目前为止,我还没有看到任何注入(inject)到 stateProvider
中的东西,也没有能够从日志中提取任何信息。我也尝试过使用
@Autowired
public void setStateProvider(StateProvider stateProvider){
this.stateProvider = stateProvider;
}
谢谢
最佳答案
为了检测 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
类加载器示例:
<Context>
<Loader loaderClass="org.springframework.instrument.classl oading.tomcat.TomcatInstrumentableClassLoader" />
</Context>
关于java - Spring Boot,@Autowire 使用@Configurable 和加载时间织入非托管类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29167500/