2015-03-20 14 views
7

Ich habe eine Sammlung von nicht verwalteten Klassen, die ich außerhalb von Spring instanziiert bin. Ich habe versucht, Spring AOP mit Ladezeit @Autowire eine Bohne in diese Klassen zu weben, aber bisher noch kein Glück gehabt.Spring Boot, @Autowire in eine nicht verwaltete Klasse mit @Configurable und Ladezeit Weben

Ich habe mit Tomcat 8 und Spring Boot 1.2.0 getestet.

Mein @Configuration, wo ich versuchen Klasse einzurichten sieht wie folgt aus:

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

Innen Config ich die Bohne definiere ich zu @Auotwire in meine nicht verwalteten Klassen wollen:

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

Die unmanaged Bohne aussieht wie folgt:

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

@Autowired 
private StateProvider stateProvider; 

Und ich habe folgende deps in meinem 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> 

Bisher habe ich nicht in der Lage, etwas zu sehen injizierte in stateProvider oder in der Lage gewesen, irgendwelche Informationen aus den Protokollen zu ziehen. Ich habe auch Setter Stil Injektion mit

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

Dank

Antwort

3

Um Instrument LTW versucht man entweder den javaagent verwenden müssen, oder spring-tomcat-weaver.jar im \lib Ordner ablegen und TomcatInstrumentableClassLoader in context.xml einzurichten.

javaagent Beispiel:

-javaagent:"${settings.localRepository}/org/springframework/spring-agent/2.5.6.SEC03/spring-agent-2.5.6.SEC03".jar 

Classloader Beispiel:

<Context> 
    <Loader loaderClass="org.springframework.instrument.classl oading.tomcat.TomcatInstrumentableClassLoader" /> 
</Context>