我最近开始使用AspectJ LTW。我将 Eclipse 与AJDT一起使用。我基本上使用“outjar”选项来使用已编译的 .aj 文件创建我的“AspectJ 库(.jar 文件)”。
下一步是在“普通”Eclipse Java 项目中使用这个 jar 文件,如果我在 javaagent 路径上有 aspectjweaver.jar 库,它就可以完美运行:
-javaagent:lib/aspectjweaver.jar
我的下一个目标是在这个“普通”java 项目中使用第二个 aop.xml 文件。META-INF/aop.xml
如果文件位于类加载器搜索路径上,即使这样也能很好地工作。现在我发现了这一点:
http://www.eclipse.org/aspectj/doc/released/README-1612.html
(向下滚动到“aop.xml 中更灵活的切入点/代码连接”)
以下 XML 规范可以正常工作:
<aspectj>
<aspects>
<concrete-aspect name="MyAspect">
<before pointcut="set(* *.myStringField) AND args(message)"
invokeClass="my.package.SomeRegularJavaClass" invokeMethod="someMethod(JoinPoint tjp, java.lang.String message)" />
</concrete-aspect>
</aspects>
</aspectj>
但我真正感兴趣的是将我自己的参数/变量/消息“传递”给方法someMethod
。就像是:
<aspectj>
<aspects>
<concrete-aspect name="MyAspect">
<before pointcut="set(* *.myStringField) AND args(message)"
invokeClass="my.package.SomeRegularJavaClass" invokeMethod="someMethod(JoinPoint tjp, java.lang.String message, java.lang.String "customMessage")" />
</concrete-aspect>
</aspects>
</aspectj>
那么有没有办法将字符串(例如)传递给方法someMethod
?或者还有其他可用的选项吗?