首先让我注意一下,我使用AspectJ,我喜欢它,但我还能用它做什么。
我知道AspectJ可以/用于记录。在某些情况下,它用于事务控制 - 主要与注释一起实现。 AspectJ也可用于使用(代码生成的)方法增强类,如Spring Roo。
但我相信AspectJ和AOP一般可用于:日志记录,事务控制和模拟部分类。
那么AspectJ和AOP的其他有用用例是什么?
答案 0 :(得分:32)
修改
虽然自从我给出这个答案已经很多年了,但我决定添加以下内容以使答案更加完整。
false
但应返回true
。您可以使用AspectJ解决此问题。 答案 1 :(得分:19)
Wikipedia entry为您提供了更多示例(但不是很多)。通常,面向方面编程应该仅用于实现不属于类的核心关注的简单行为,并且对于不同的类是通用的。一旦你开始在你的方面放置太多的逻辑,代码变得非常难以理解。
您建议的方面(日志记录,交易,...)是最常用的。我也会增加安全性。
答案 2 :(得分:5)
可以使用AspectJ来强制执行某些(设计)规则。
在类中注入Mocks,否则将使用new创建新实例。 假设你有这个代码:
public void sendInvitationEmail(String address) {
InvitationEmail email = new InvitationEmail();
email.sendTo(address).send();
}
需要用模拟替换email
。然后你可以使用一个Aspect(@Pointcut("call(InvitationEmail.new(..))")
)来“注入”一个模拟。 - @参见Daniel Roop的Blog JMock and AspectJ,以及Spring Roo的@MockStaticEntityMethods(Mock Static Methods using Spring Aspect)