天天看點

AOP面向切程式設計及在Spring中的使用方法

AOP(Aspect-Oriented Programming, 面向切面程式設計): 是一種新的方法論, 是對傳統的 OOP(Object-Oriented Programming, 面向對象程式設計)的補充

AOP 的主要程式設計對象是切面(aspect)

在應用 AOP 程式設計時, 仍然需要定義公共功能, 但可以明确的定義這個功能在哪裡, 以什麼方式應用, 并且不必修改受影響的類

AOP 的好處:

每個事物邏輯位于一個位置, 代碼不分散, 便于維護和更新

業務子產品更簡潔, 隻包含核心業務代碼

單純的術語也許不能讓你清楚的明白 AOP,那麼接下來我會通過一個執行個體來更加清晰的描述:

假設我們現在來實作一個電腦,我們可以很容易的寫出:

這樣簡單的代碼就實作了一個基礎的電腦

但是,重點來了!如果現在客戶提出了新要求:要求輸出計算日志(log),就像這樣:

AOP面向切程式設計及在Spring中的使用方法

為此,我們可能需要這樣為每一個方法都加上輸出日志的内容:

這樣做無疑使得我們會寫很多重複備援的代碼,極大的降低了效率而且非常不利于維護

像這樣多出來的重複性的無關功能邏輯的代碼,我們就稱其為切面(Aspect)

面向切面程式設計(AOP)需要解決的問題就是:将切面獨立出來

AOP面向切程式設計及在Spring中的使用方法

切面(Aspect): 橫切關注點(跨越應用程式多個子產品的功能)被子產品化的特殊對象

通知(Adive): 切面必須要完成的工作

目标(Target): 被通知的對象

代理(Proxy): 向目标對象應用通知之後建立的對象

連接配接點(Joinpoint): 程式執行的某個特定位置

切點(Cutpoint): 每個類都擁有多個連接配接點, AOP 通過切點定位到特定的連接配接點. 類比: 連接配接點相當于資料庫中的記錄, 切點相當于查詢條件

@Before 前置通知

@After 後置通知

@AfterReturning 傳回通知

@AfterThrowing 異常通知

@Around 環繞通知