首先讓我注意一點,我使用AspectJ和我喜歡它,但是我還能用它做些什麼。AspectJ的優點是什麼?
我知道AspectJ可以被用於記錄。在某些情況下,它用於事務控制 - 主要與註釋一起實施。 AspectJ也可以用來增強(代碼生成)方法的類,就像Spring Roo一樣。但我相信AspectJ和AOP一般來說,可以用於多於:日誌記錄,事務控制和模擬部分類。
那麼AspectJ和AOP有哪些其他有用的用例呢?
首先讓我注意一點,我使用AspectJ和我喜歡它,但是我還能用它做些什麼。AspectJ的優點是什麼?
我知道AspectJ可以被用於記錄。在某些情況下,它用於事務控制 - 主要與註釋一起實施。 AspectJ也可以用來增強(代碼生成)方法的類,就像Spring Roo一樣。但我相信AspectJ和AOP一般來說,可以用於多於:日誌記錄,事務控制和模擬部分類。
那麼AspectJ和AOP有哪些其他有用的用例呢?
編輯
雖然我給了這個答案很多年過去了,但我決定添加以下內容來使答案更加完整。
false
的布爾方法,但應返回true
。您可以使用AspectJ修復此問題。Wikipedia entry給你幾個例子(但不是那麼多)。通常情況下,面向方面的編程只能用於實現簡單的行爲,這些行爲不屬於某個類的核心關注部分,並且對於不同的類是共同的。只要你開始在你的方面投入太多的邏輯,代碼變得真的不可讀。
您建議的方面(日誌記錄,交易等)是最常用的方面。我也會增加安全性。
可以使用AspectJ來執行一些(設計)規則。
進樣嘲笑在原本將通過使用新創建新實例類。 假設你有這樣的代碼:
public void sendInvitationEmail(String address) {
InvitationEmail email = new InvitationEmail();
email.sendTo(address).send();
}
而且需要通過模擬來代替email
。然後你可以使用一個方面(@Pointcut("call(InvitationEmail.new(..))")
)來「注入」一個模擬。 - @See Blog JMock and AspectJ Daniel Roop以及Spring Roo的@MockStaticEntityMethods(Mock Static Methods using Spring Aspect)
您應該閱讀Ramnivas Laddad的AspectJ in Action http://www.manning.com/laddad2 TOC將爲您提供理念:http://www.manning.com/laddad2/excerpt_contents.html – 2010-11-30 12:40:04
@George Stocker:這個問題有14個upvotes,0個downvotes,3個答案,總共有21個upvotes,你在4年後擱置 - 真的?問題是這個問題有很好的答案,所以它沒有真正存在這個「太寬泛」的問題。 – Ralph 2014-08-10 12:09:46