1. 程式人生 > >AOP面向切面和OOP面向物件的簡單理解比較

AOP面向切面和OOP面向物件的簡單理解比較

  AOP為Aspect Oriented Programming的縮寫,意為:面向切面程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。

  AOP與OOP是面向不同領域的兩種設計思想。

  OOP(面向物件程式設計)針對業務處理過程的實體及其屬性行為進行抽象封裝,以獲得更加清晰高效的邏輯單元劃分。

  AOP則是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果

  我們可以單單從上面的字面上來理解AOP和OOP的話,用下面的理解也不為過:

  OOP實際上是對物件的屬性和行為的封裝,而AOP對於這點就無從談起,但是AOP是處理某個步驟和階段的,從中進行切面的提取,也就是說,如果幾個或更多個邏輯過程中,有重複的操作行為,AOP就可以提取出來,運用動態代理,實現程式功能的統一維護,這麼說來可能太含蓄,如果說到許可權判斷,日誌記錄等,可能就明白了。如果我們單純使用OOP,那麼許可權判斷怎麼辦?在每個操作前都加入許可權判斷?日誌記錄怎麼辦?在每個方法裡的開始、結束、異常的地方手動新增日誌?所有,如果使用AOP就可以藉助代理完成這些重複的操作,就能夠在邏輯過程中,降低各部分之間的耦合了。二者揚長補短,互相結合最好。

  下面詳細瞭解一些AOP的概念:

  • 方面(Aspect):一個關注點的模組化,這個關注點實現可能另外橫切多個物件。事務管理是J2EE應用中一個很好的橫切關注點例子。方面用Spring的Advisor或攔截器實現。
  • 連線點(Joinpoint):程式執行過程中明確的點,如方法的呼叫或特定的異常被丟擲。
  • 通知(Advice):在特定的連線點,AOP框架執行的動作。各種型別的通知包括“around”、“before”和“throws”通知。通知型別將在下面討論。許多AOP框架包括Spring都是以攔截器做通知模型,維護一個“圍繞”連線點的攔截器鏈。
  • 切入點(Pointcut):指定一個通知將被引發的一系列連線點的集合。AOP框架必須允許開發者指定切入點,例如,使用正則表示式。
  • 引入(Introduction):新增方法或欄位到被通知的類。Spring允許引入新的介面到任何被通知的物件。例如,你可以使用一個引入使任何物件實現IsModified介面,來簡化快取。
  • 目標物件(Target Object):包含連線點的物件,也被稱作被通知或被代理物件。
  • AOP代理(AOP Proxy):AOP框架建立的物件,包含通知。在Spring中,AOP代理可以是JDK動態代理或CGLIB代理。
  • 編織(Weaving):組裝方面來建立一個被通知物件。這可以在編譯時完成(例如使用AspectJ編譯器),也可以在執行時完成。