AspectJ LTW将所有应用程序部署到单个JVM

Sam*_*mmy 5 aop tomcat aspectj classloader load-time-weaving

我已将aspectJ方面捆绑到单个War(aspectsWar.war)文件中,并将其部署到具有现有运行应用程序的应用程序服务器,并在tomcat服务器上使用LTW编织与javaagent.

我可以在aspectWar.war上看到拦截调用的方面,但是在同一个jvm上运行的其他应用程序上没有.

有没有办法让我的aspectj方面识别和编织所有其他正在运行的应用程序(最好不必修改单个war文件),可能是通过对app server的一些自定义类加载更改...

注意:这是使用aspectJ本身而没有任何与Spring相关的集成.

请指教.

zag*_*gyi 2

对特定类加载器的加载时间编织的限制是 spring 提供的一个功能。正如文档所述:

Spring 框架为 AspectJ LTW 带来的增值在于能够对编织过程进行更细粒度的控制。“Vanilla”AspectJ LTW 使用 Java (5+) 代理实现,该代理通过在启动 JVM 时指定 VM 参数来打开。因此,它是 JVM 范围内的设置,在某些情况下可能没问题,但通常有点过于粗糙。支持 Spring 的 LTW 使您能够在每个 ClassLoader 的基础上打开 LTW,这显然是更细粒度的,并且在“单 JVM 多应用程序”环境中更有意义(例如在典型的应用服务器环境)。

抱歉引用太长,但这基本上是您问题的答案。如果您想在 JVM 范围内应用方面,请使用AspectJ 提供的代理而不是Spring 加载时编织配置。