首先让我注意,我使用 AspectJ 并且我喜欢它,但我还能用它做什么。
我知道 AspectJ 可以/用于日志记录。在某些情况下,它用于事务控制——主要与注释一起实现。AspectJ 也可用于使用(代码生成的)方法来增强类,就像 Spring Roo 所做的那样。
但我相信 AspectJ 和 AOP 总体上可以用于以下方面:日志记录、事务控制和模拟部分类。
那么 AspectJ 和 AOP 的其他有用用例是什么?
编辑
尽管自从我给出这个答案以来已经过去了很多年,但我决定添加以下内容以使答案更加完整。
false
在某些条件下返回但应该返回的布尔方法true
。您可以使用 AspectJ 解决此问题。维基百科条目为您提供了更多示例(但不是那么多)。通常,面向方面的编程应该只用于实现不属于类核心关注的部分并且对不同类通用的简单行为。一旦你开始在你的切面中加入过多的逻辑,代码就会变得非常不可读。
您建议的方面(日志记录、事务...)是最常用的。我也会增加安全性。
可以使用 AspectJ 来执行一些(设计)规则。
在类中注入 Mocks,否则会使用 new 创建新实例。假设您有以下代码:
public void sendInvitationEmail(String address) {
InvitationEmail email = new InvitationEmail();
email.sendTo(address).send();
}
并且需要用email
模拟替换。然后您可以使用 Aspect ( @Pointcut("call(InvitationEmail.new(..))")
) 来“注入”模拟。-- @See博客 JMock 和Daniel Roop 的 AspectJ,以及 Spring Roo 的 @MockStaticEntityMethods(使用 Spring Aspect 模拟静态方法)