AOP: (Aspect Oriented Programming) 面向切面編程。是目前軟件開發中的一個熱點,也是Spring框架中容。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。主要的功能是:日志記錄,性能統計,安全控制,事務處理,異常處理等等。
AOP、OOP在字面上雖然非常類似,但卻是面向不同領域的兩種設計思想。OOP(面向對象編程)針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯單元划分。 而AOP則是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。這兩種設計思想在目標上有着本質的差異。
舉個簡單的例子,對於“雇員”這樣一個業務實體進行封裝,自然是OOP的任務,我們可以為其建立一個“Employee”類,並將“雇員”相關的屬性和行為封裝其中。而用AOP設計思想對“雇員”進行封裝將無從談起。
同樣,對於“權限檢查”這一動作片斷進行划分,則是AOP的目標領域。而通過OOP對一個動作進行封裝,則有點不倫不類。 換而言之,OOP面向名詞領域,AOP面向動詞領域。
總之,AOP可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術,把散落在程序中的公共部分提取出來,做成切面類,這樣的好處在於,代碼的可重用,一旦涉及到該功能的需求發生變化,只要修改該代碼就行,否則,你要到處修改,如果只要修改1、2處那還可以接受,萬一有1000處呢。
最常用的AOP應用在數據庫連接以及事務處理上。
實現模式可能為:代理模式+工廠模式