POST 1:理论问题
我们使用一些软件,实际上是一个带有自己的Tomcat和shell脚本的Web模块来控制它。它还有一个插件系统,允许您上传具有特定结构的.jar文件,以向应用程序添加新功能。
问题: 我想控制并实际更改主系统/应用程序(不在我的jar中)中对不同调用的响应。我可以使用AspectJ来做到这一点吗?为什么或者为什么不?除了更改主应用程序的代码外,其他一般可能性是什么。
POST 2:尝试
我尝试这样做(在Eclipse中):
问题:
在导出的aspect-jar中,只有AspectJ项目的.class文件,INPATH-Jar没有.class文件。 是否应该有其他类,来自导入的INPATH-jar?
在导出的aspect-jar中,没有带有aspectj-runtime(aspectj-rt.jar)的jar。它应该在那里,或者如何配置虚拟机来拥有它?
答案 0 :(得分:1)
是的,为什么不呢?如果您可以扩展您的问题并解释(可能通过示例)系统中有哪些参与者和行动,我们可能能够以更加坦诚的方式帮助您。但基本上我没有看到任何问题。可以动态加载JAR模块,但是如果您知道要拦截的Tomcat应用程序中的哪些调用,则可以通过重新编织现有类来静态地对其进行静态检测,或者在JVM启动期间通过LTW(加载时编织)动态地对其进行检测。 。没有必要触摸您上传的JAR模块,据我了解,您希望避免这些模块。
您可能希望通过
编织主应用程序的目标类execution(<methodsToBeChecked>)
切入点与around()
建议。其他细节取决于您的具体用例,包,类和方法名称,参数等。around
建议可以执行以下一项或多项操作:
你的幻想(以及AspectJ的一些限制)是极限。 : - )