如何在使用aop.xml进出war文件时避免运行多个AspectJ编织器

时间:2014-10-21 21:37:05

标签: aspectj spring-aop

我有一个war文件,其中包含许多AspectJ方面和一个aop.xml文件,它指定了这些方面适用的包。我通过在Spring配置中添加这一行来启用Spring加载时间:

<context:load-time-weaver/>

这启动了我的app服务器的默认编织器:org.springframework.instrument.classloading.weblogic.WebLogicLoadTimeWeaver。

问题是,我们还有另一个方面&amp;系统类路径上的关联aop.xml文件定义由-javaagent:lib / aspectjweaver-1.7.4.jar触发,因此加载另一个编织器。

我看到两个织布工似乎发生了冲突:

[ChangeAwareClassLoader@70b2974f] warning define generated class failed -- (LinkageError) loader (instance of  weblogic/utils/classloaders/ChangeAwareClassLoader): attempted  duplicate class definition for name: "x/y/MyClassImpl$AjcClosure1"
loader (instance of  weblogic/utils/classloaders/ChangeAwareClassLoader): attempted  duplicate class definition for name: "x/y/MyClassImpl$AjcClosure1"
java.lang.LinkageError: loader (instance of  weblogic/utils/classloaders/ChangeAwareClassLoader): attempted  duplicate class definition for name: "x/y/MyClassImpl$AjcClosure1"

我想知道是否有办法让战争使用javaagent线定义的aspectjweaver,所以我只有1个weaver在运行?注意我不想将我的方面从战争转移到系统类路径,因为它们对其他库有许多依赖。

非常感谢任何指导!

由于

1 个答案:

答案 0 :(得分:0)

我想知道您是否可以使用其中一个特殊属性来配置AspectJ LTW以关闭与代理相关的编织器,以便不会创建它并替代使用替代。基本上在启动时设置此系统属性:

-Daj.weaving.loadersToSkip=org.springframework.instrument.classloading.weblogic.WebLogicLoadTimeWeaver