首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EnableLoadTimeWeaving注释导致应用程序上下文加载失败。

EnableLoadTimeWeaving注释导致应用程序上下文加载失败。
EN

Stack Overflow用户
提问于 2022-02-03 22:00:20
回答 1查看 251关注 0票数 2

我试图在Spring应用程序中启用AspectJ加载时编织(而不是Spring )。我的目标是在加载时将建议编织到带注释的字段和java.lang.reflect.Field.set(Object, Object)中。

根据春季医生,我试过:

代码语言:javascript
运行
复制
@Configuration
@EnableLoadTimeWeaving
public class Config {}

使用此配置运行Spring应用程序会导致应用程序上下文无法加载以下消息:

代码语言:javascript
运行
复制
Caused by: java.lang.IllegalStateException:
  ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader]
    does NOT provide an 'addTransformer(ClassFileTransformer)' method.
    Specify a custom LoadTimeWeaver or start your Java virtual machine
    with Spring's agent: -javaagent:spring-instrument-{version}.jar

该消息中的后一项建议并不是一个好的选择,因为我试图避免需要启动脚本的修改。我需要编织的方面实际上驻留在库中,因此所有实现Spring项目的人都必须进行任何必要的更改,才能使LTW正常工作。

我也尝试过这种配置:

代码语言:javascript
运行
复制
@Configuration
@EnableLoadTimeWeaving
public class Config implements LoadTimeWeavingConfigurer {

    @Override
    public LoadTimeWeaver getLoadTimeWeaver() {
        return new ReflectiveLoadTimeWeaver();
    }
}

使用此配置运行Spring应用程序会导致应用程序上下文无法加载以下消息:

代码语言:javascript
运行
复制
Caused by: java.lang.IllegalStateException:
  ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader]
    does NOT provide an 'addTransformer(ClassFileTransformer)' method.

看来我需要让JVM使用具有addTransformer(ClassFileTransformer)方法的类加载器。我不知道该怎么做,尤其是在这种情况下。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-04 03:02:18

我不是一个活动的Spring用户,但我知道Spring支持注释-或XML配置的代理热附件,并且根据它的文档有一些特定于容器的类。但是,它似乎并不能在所有情况下可靠地工作,特别是在从IDE运行Spring应用程序时。

总之,AspectJ织布器1.8.7和最近的可热连接。我解释了如何在Spring设置这里中做到这一点。如果您想要一个更简单的解决方案,使用更少的样板,但又需要一个名为byte-buddy-agent的小型助手库的依赖项,则可以使用这个解决方案作为快捷方式。我还没有试过它,但是我知道帮助器库,并且在其他上下文中使用它,当热附字节码工具代理时,避免为适应不同的JVM版本和配置情况而大惊小怪。但是为了在JVM 9+上工作,您可能需要手动激活JVM的自动附件,这将是对启动脚本的另一项修改,您将回到第1步。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70978893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档