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>
Другие вопросы по тегам