2015-03-20 11 views
7

Mam kolekcję niezarządzanych klas, które są tworzone poza wiosną. Próbowałem użyć Spring AOP z tasowaniem czasu ładowania do @Autowire fasoli do tych klas, ale do tej pory nie miałem szczęścia.Spring Boot, @Autowire w niezarządzaną klasę przy użyciu @Configurable i tasowanie czasu ładowania

Testowałem przy użyciu Tomcat 8 i Spring Boot 1.2.0.

My @Configuration gdzie próbuję skonfigurować klasy wygląda następująco:

@Configuration 
@PropertySource("classpath:application.properties") 
@EnableSpringConfigured 
@EnableLoadTimeWeaving 
public class Config 

Wewnątrz Config zdefiniować fasoli Chcę @Auotwire do moich niezarządzani klasach:

@Bean 
public StateProvider stateProvider() { 
    //setup bean 
    return new DynamoStateProviderImpl(); 
} 

niezarządzanego wygląda fasoli tak:

@Configurable(autowire = Autowire.BY_TYPE, dependencyCheck = true, preConstruction = true) 
public class StateOutput implements UnifiedOutput { 

@Autowired 
private StateProvider stateProvider; 

I mam następujące deps w moim 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> 

Do tej pory nie udało nam się zobaczyć coś wstrzykuje się stateProvider lub byli w stanie wyciągnąć żadnych informacji z dzienników. Ja również próbował zastrzyk stylu seter korzystając

@Autowired 
public void setStateProvider(StateProvider stateProvider){ 
    this.stateProvider = stateProvider; 
} 

Dzięki

Odpowiedz

3

W celu rozdzielczej LTW musisz albo użyć javaagent lub umieścić spring-tomcat-weaver.jar w folderze \lib i skonfigurować TomcatInstrumentableClassLoader w context.xml.

javaagent przykład: Przykład

-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>