所以,当我的域中对象的状态发生变化时,我开始考虑使用AspectJ来处理处理事件。
实际上,我想写一些包含我域中所有setter方法的建议。调用通知时,它将检查所设置字段的初始值,运行setter,然后在setter执行后检查该值。如果值发生更改,它将向事件侦听器触发事件,通知更改。
我使用了这里的教程:http://www.andrewewhite.net/wordpress/2010/03/17/aspectj-annotation-tutorial/,但是我无法接到任何建议。请注意,我只是使用LTW方法编织我的建议,我不是使用AspectJ语言编写建议并预编译它。
我的aop.xml(在我的测试套件的META-INF中)看起来像这样:
<aspectj> <aspects> <aspect name="domain.aop.TestAspect"/> </aspects> </aspectj>
我创建的Aspect类看起来像这样:
package domain.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class TestAspect { @Around("call(* domain.*.set*(..))") public void aroundSetMethods (JoinPoint jp) { System.out.println ("aroundSetMethod called"); } }
当我运行我的测试用例时,我可以看到(通过设置断点)调用方法(domain.Error.setTask())。我相信这应该引发我的建议,但我从未接受过建议方法。
指出我在这里做错了什么?
由于
答案 0 :(得分:3)
您还必须包含要编织的类。
尝试用以下内容替换aop.xml文件:
<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<weaver>
<!-- only weave classes in this package -->
<include within="domain.*" />
</weaver>
<aspects>
<!-- use only this aspect for weaving -->
<aspect name="domain.aop.TestAspect"/>
</aspects>
</aspectj>
如果您已正确配置运行时服务器或Java代理,您还可以在日志中看到编织过程。
我希望它有所帮助!