Spring Boot, @Autowire в неуправляемый класс, использующий @Configurable и время загрузки
У меня есть коллекция неуправляемых классов, которые я создаю вне 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
public StateProvider stateProvider() {
//setup bean
return new DynamoStateProviderImpl( );
}
Неуправляемый компонент выглядит так:
@Configurable(autowire = Autowire.BY_TYPE, dependencyCheck = true, preConstruction = true)
public class StateOutput implements UnifiedOutput {
@Autowired
private StateProvider stateProvider;
И у меня есть следующие 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;
}
Спасибо
1 ответ
Чтобы использовать LTW, вам нужно использовать javaagent или place 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>