5

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

我可以看到切面拦截了 aspectWar.war 上的调用,但看不到在同一 jvm 上运行的其他应用程序上。

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

注意:这是单独使用 aspectJ,没有任何与 Spring 相关的集成。

请指教。

4

1 回答 1

2

将加载时间编织到特定类加载器的限制是 spring 提供的一个特性。如文档所述:

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

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

于 2013-05-16T17:56:34.930 回答