我试图在Spring应用程序中启用AspectJ加载时编织(而不是Spring )。我的目标是在加载时将建议编织到带注释的字段和java.lang.reflect.Field.set(Object, Object)
中。
根据春季医生,我试过:
@Configuration
@EnableLoadTimeWeaving
public class Config {}
使用此配置运行Spring应用程序会导致应用程序上下文无法加载以下消息:
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正常工作。
我也尝试过这种配置:
@Configuration
@EnableLoadTimeWeaving
public class Config implements LoadTimeWeavingConfigurer {
@Override
public LoadTimeWeaver getLoadTimeWeaver() {
return new ReflectiveLoadTimeWeaver();
}
}
使用此配置运行Spring应用程序会导致应用程序上下文无法加载以下消息:
Caused by: java.lang.IllegalStateException:
ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader]
does NOT provide an 'addTransformer(ClassFileTransformer)' method.
看来我需要让JVM使用具有addTransformer(ClassFileTransformer)
方法的类加载器。我不知道该怎么做,尤其是在这种情况下。有什么建议吗?
发布于 2022-02-04 03:02:18
我不是一个活动的Spring用户,但我知道Spring支持注释-或XML配置的代理热附件,并且根据它的文档有一些特定于容器的类。但是,它似乎并不能在所有情况下可靠地工作,特别是在从IDE运行Spring应用程序时。
总之,AspectJ织布器1.8.7和最近的可热连接。我解释了如何在Spring设置这里中做到这一点。如果您想要一个更简单的解决方案,使用更少的样板,但又需要一个名为byte-buddy-agent
的小型助手库的依赖项,则可以使用这个解决方案作为快捷方式。我还没有试过它,但是我知道帮助器库,并且在其他上下文中使用它,当热附字节码工具代理时,避免为适应不同的JVM版本和配置情况而大惊小怪。但是为了在JVM 9+上工作,您可能需要手动激活JVM的自动附件,这将是对启动脚本的另一项修改,您将回到第1步。
https://stackoverflow.com/questions/70978893
复制相似问题