2010-02-04 78 views
47

我想描述一下在應用程序設計中有效參與AOP的可能情況。所有我迄今遇到的是:可能的AOP用例有哪些?

  • 記錄相關
  • 安全檢查
  • 事務管理
  • 的調整遺留應用程序

還有什麼呢?

(它不必是必然Spring基於代理的AOP - 相當的JBoss AOP)

Related question

+1

「可能的情況下」?這是一個近乎*無限的*集合。然而,並非所有人都是一個好主意。把一切都可能。有什麼辦法縮小或集中這個問題嗎? – 2010-02-04 02:57:45

+1

閱讀順利:問題包含「在應用程序設計中有效啓用AOP的可能案例」。我的意思是使用AOP是個好主意。對不起,如果問題不清楚。 – 2010-02-04 02:59:28

+0

應該是社區維基 – skaffman 2010-02-04 09:54:00

回答

25

我可以舉兩個例子,我們使用它:

  • 在JMX中自動註冊對象以進行遠程管理。如果一個類註解了我們的@AutoRegister註解,我們有一個方面可以監視該類的新實例並自動將它們註冊到JMX中。

  • 審計日誌(黃金標準AOP使用情況)。它有點粗糙,但一般的方法是註釋代表一些可審計行爲的方法。與像Spring Security的結合,我們可以得到一個不錯的主意:

    • 用戶是誰
    • 他們調用什麼方法
    • 他們提供什麼樣的數據
    • 什麼時候方法被調用
    • 調用是否成功與否(即,如果引發了異常)
3

方法級別的緩存,如果你的方法是無狀態的(我是指返回時用相同的參數值重複調用相同的值)。這對DAO方法更有效,因爲它避免了數據庫命中。

4
  • 讀/寫鎖。我使用一個方面來定義需要讀取鎖或獨佔鎖的方法,而不是複製相同的片段。
7

要查看AOP的適用範圍,我真的建議您閱讀Aspect-Oriented-Software-Development-Use-Cases。本書闡述了使用AOP的功能和非功能需求的用例。之後,你會看到,方面可以用於更多的要求比日誌記錄,追蹤,安全等。

2
  • 異常處理:不需要重複嘗試的可怕列表... catch,catch,catch等等 - 也意味着異常處理保證是一致的。
  • 性能監控:非常有用,因爲使用某個方面是非侵入性的,可以在事實之後完成,然後在不再需要時關閉。
1

我也會推薦用於幾個方面:

  • 異步方法調用
  • 監測

隨着春的tcServer(開發者),你可以輕鬆地監視你所有的Spring Bean與 @Component註釋。你可以看到使用的時間,輸入和返回的數據,包括例外。

1

INotifyPropertyChanged和類似的恐懼。

基本上只要有像這樣的代碼 - 使用一個方面,你就完成了。

3

我們將其用於軟件許可證管理,即只有當計算機安裝了某些特定許可證時才允許軟件運行。這與您列出的用途沒有什麼不同,因爲它是一種安全檢查。

我發表了一篇博客條目描述實際執行代碼合同here

1

運行時檢查。 Code Contracts for .NET使用AOP爲

運行時檢查。我們的二進制重寫器通過注入契約來修改程序,這些契約被檢查爲程序執行的一部分。

0

我們使用AspectJ來完成AOP。除上述提到的用例如下:

  • 將訪問方法調用限制爲只有幾個類。
  • 自動註釋選定的方法/類/字段。