AOP(Aspect-Oriented Programming, 面向切面程式設計): 是一種新的方法論, 是對傳統的 OOP(Object-Oriented Programming, 面向對象程式設計)的補充
AOP 的主要程式設計對象是切面(aspect)
在應用 AOP 程式設計時, 仍然需要定義公共功能, 但可以明确的定義這個功能在哪裡, 以什麼方式應用, 并且不必修改受影響的類
AOP 的好處:
每個事物邏輯位于一個位置, 代碼不分散, 便于維護和更新
業務子產品更簡潔, 隻包含核心業務代碼
單純的術語也許不能讓你清楚的明白 AOP,那麼接下來我會通過一個執行個體來更加清晰的描述:
假設我們現在來實作一個電腦,我們可以很容易的寫出:
這樣簡單的代碼就實作了一個基礎的電腦
但是,重點來了!如果現在客戶提出了新要求:要求輸出計算日志(log),就像這樣:

為此,我們可能需要這樣為每一個方法都加上輸出日志的内容:
這樣做無疑使得我們會寫很多重複備援的代碼,極大的降低了效率而且非常不利于維護
像這樣多出來的重複性的無關功能邏輯的代碼,我們就稱其為切面(Aspect)
面向切面程式設計(AOP)需要解決的問題就是:将切面獨立出來
切面(Aspect): 橫切關注點(跨越應用程式多個子產品的功能)被子產品化的特殊對象
通知(Adive): 切面必須要完成的工作
目标(Target): 被通知的對象
代理(Proxy): 向目标對象應用通知之後建立的對象
連接配接點(Joinpoint): 程式執行的某個特定位置
切點(Cutpoint): 每個類都擁有多個連接配接點, AOP 通過切點定位到特定的連接配接點. 類比: 連接配接點相當于資料庫中的記錄, 切點相當于查詢條件
@Before 前置通知
@After 後置通知
@AfterReturning 傳回通知
@AfterThrowing 異常通知
@Around 環繞通知