3

@Configuration ビルドの例を (groovy で) 動作させようとしてきたので、Spring コンテナーを使用して依存性注入をトリガーできますが、取得できるのは -javaagent に関するエラーだけで、修正できないようです

私はこのような beanConfig クラスを持っています

@Configuration @EnableSpringConfigured // should turn on AnnotationBeanConfigurerAspect @EnableLoadTimeWeaving (aspectjWeaving=AspectJWeaving.ENABLED) // switch on for this context class BeanConfig {

次に、サンプルクラスで new を呼び出して、上記の構成クラスで diSource Bean が宣言されている Spring コンテナーの外に注入を試みます。

` @Configurable (autowire=Autowire.BY_TYPE, dependencyCheck=true) class ExtDI { @Autowired DISource diSource

def say () {
    println "ExtDI : diSource set as " + diSource.name
}
}

`

私のサンプラークラスでは、これを呼び出してインジェクションをトリガーしようとします

` ... static void main (String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(/ BeanConfig.class /) ctx.scan ("com.softwood") ctx.refresh () ....

    //trigger LTW injection
    ExtDI ext = new ExtDI()
    ext.say()

`

クラスパスには、aspectjeaver-1.6.10.jar、aspectjrt-1.6.10.jar、spring-xxx-3.1.4.jars などがあります

dependencies { compile 'org.codehaus.groovy:groovy-all:2.1.7' compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' compile "org.springframework:spring-core:${spring_version}" compile "org.springframework:spring-beans:${spring_version}" compile "org.springframework:spring-context:${spring_version}" compile "org.springframework:spring-aspects:${spring_version}" compile "org.springframework:spring-aop:${spring_version}" compile "org.springframework:spring-instrument:${spring_version}" compile "org.aspectj:aspectjrt:1.6.10" compile "org.aspectj:aspectjweaver:1.6.10" compile "cglib:cglib:2.2" }

私が持っているvm引数のEclipseプロジェクトランタイムで -javaagent:C:/Users/802518659/aspectjweaver-1.6.10.jar

spring-instrument-3.1.4.jar でも同じことを試しましたが、同じ問題がありました。

プロジェクトを実行すると、このエラーが発生します

`

Oct 19, 2013 4:02:40 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@492ff1: startup date [Sat Oct 19 16:02:40 BST 2013]; root of context hierarchy
Oct 19, 2013 4:02:40 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@11bedb0: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,beanConfig,willsBean,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration,org.springframework.context.config.internalBeanConfigurerAspect,org.springframework.context.annotation.LoadTimeWeavingConfiguration,loadTimeWeaver,publicBean,privateBean,publicBeanWithDI,myDISource,diTarget]; root of factory hierarchy
Oct 19, 2013 4:02:40 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@11bedb0: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,beanConfig,willsBean,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration,org.springframework.context.config.internalBeanConfigurerAspect,org.springframework.context.annotation.LoadTimeWeavingConfiguration,loadTimeWeaver,publicBean,privateBean,publicBeanWithDI,myDISource,diTarget]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver' defined in class path resource [org/springframework/context/annotation/LoadTimeWeavingConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.instrument.classloading.LoadTimeWeaver org.springframework.context.annotation.LoadTimeWeavingConfiguration.loadTimeWeaver()] threw exception; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:581)
...

`

これは、アプリケーションが Java クラスローダを計測できないことを示しています - -javaagent:spring-instrument-xxx またはspectjweaver.jar で開始したにもかかわらず - どちらも失敗します

それで、私は何を間違っていますか-これは本当に気になり始めています-コンテキスト内で通常のインジェクションを機能させることができます(LTWなし)が、コンテナの外でこのインジェクションを機能させたいと本当に思っていました

私は何を間違っていますか

4

1 に答える 1

3

少し時間がかかりましたが、どこが間違っていたのかを突き止めました

春のフォーラムの別の投稿で修正されました http://forum.spring.io/forum/spring-projects/container/724426-cant-get-aspectj-load-time-weaving-to-workを参照してください

また、ここのブログに長いメモを追加しました

http://willwoodman.wordpress.com/

于 2013-10-21T14:48:43.273 に答える