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