java ClassLoader 不提供“addTransformer(ClassFileTransformer)”方法

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6989581/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 18:10:39  来源:igfitidea点击:

ClassLoader does NOT provide an 'addTransformer(ClassFileTransformer)' method

javaspringaspectj

提问by Naftuli Kay

I'm using Spring and AspectJ to do some nice weaving and I just ran into this issue after inserting <context:load-time-weaver/>into my application context:

我正在使用 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

Do I need a custom JVM to run AspectJ?!? I can't ever remember having to do this before.

我需要自定义 JVM 来运行 AspectJ 吗?!?我不记得以前必须这样做。

回答by Ryan Stewart

I can't find any documentation to support it, but I'm fairly certain that the standard JVM doesn't support Spring's style of load-time weaving. Spring's guide to enabling LTW in different environmentsimplies that this is the case in its "Generic Java applications" section.

我找不到任何支持它的文档,但我相当肯定标准 JVM 不支持 Spring 的加载时编织风格。Spring 的在不同环境中启用 LTW 的指南暗示在其“通用 Java 应用程序”部分中就是这种情况。

回答by Ghulam Mohammed Taher

You might be using some other LoadTimeWeaver class like in my case it was org.springframework.instrument.classloading.websphere.WebSphereLoadTimeWeaver from spring-context-3.1.1.RELEASE.jar. My problem was spring-instrument-3.1.1.RELEASE.jar was in higher position class hierarchy than the spring-context jar. Which was being used as default agent.

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

Solution that worked for me: I just brought the instrument jar after spring context in the classpath hierarchy error just vanished.

对我有用的解决方案:我只是在类路径层次结构错误刚刚消失的 spring 上下文之后带来了仪器 jar。