ClassLoader不提供'addTransformer(ClassFileTransformer)'方法

时间:2011-08-08 22:54:14

标签: java spring aspectj

我正在使用Spring和AspectJ进行一些很好的编织,我在将<context:load-time-weaver/>插入应用程序上下文后遇到了这个问题:

Caused by: 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.context.weaving.DefaultContextLoadTimeWeaver.setBeanClassLoader(DefaultContextLoadTimeWeaver.java:83)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1419)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1391)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
    ... 21 common frames omitted

我是否需要自定义JVM才能运行AspectJ?我以前不记得必须这样做。

2 个答案:

答案 0 :(得分:4)

我找不到任何支持它的文档,但我很确定标准JVM不支持Spring的加载时编织方式。 Spring's guide to enabling LTW in different environments意味着"Generic Java applications" section中就是这种情况。

答案 1 :(得分:1)

您可能正在使用其他一些LoadTimeWeaver类,就像我的情况一样,它是来自spring-context-3.1.1.RELEASE.jar的org.springframework.instrument.classloading.websphere.WebSphereLoadTimeWeaver。我的问题是spring-instrument-3.1.1.RELEASE.jar比spring-context jar更高的位置类层次结构。哪个被用作默认代理。

对我有用的解决方案:我刚刚在类路径层次结构错误中消失了弹簧上下文后的仪器jar。

相关问题