AOP概述
AOP(面向方面編程)是一種編程範式,一般是用與具有橫切邏輯的場合,如訪問控制、事務管理、性能檢測等,旨在通過允許橫切關注點的分離,提高模塊化。
我們可以把橫向的function提取到一個地方去,在我們使用的時候我們把它植入到相應的類中去執行。
方便代碼的修改,編寫業務邏輯時可以專心於核心業務。
AOP術語
- 切面
- 連接點
- 切入點
- 通知/增強處理
- 目標對象
- 代理對象
- 織入
面向切面編程主要關乎兩個問題,即在什麼位置執行什麼功能。
基於XML配置文件的AOP實現
使用AOP框架時,開發者需要做的主要工作是定義切入點和通知,通常採用XML配置文件或註解的方式,配置好切入點和增強處理的信息後,AOP框架會自動生成AOP代理。
前置通知
D:eclipse/spring-5
添加jar包
joinPoint.getArgs可以獲得browse的兩個參數
返回通知
返回通知是指在連接點正常執行後實施增強,不管是正常執行完成,還是拋出異常,都會執行返回通知中的內容。
實例
在上一個項目中做補充
其餘不變,運行結果:
異常通知
異常通知在連接點拋出異常後執行
實例
沒異常,先整出來個異常
環繞通知
環繞通知是圍繞在連接點前後,比如一個方法調用的前後,是最強大的通知類型,在方法調用前後自定義操作。環繞通知還需要負責決定是繼續處理joinpoint(調用 ProceedingJoinPoint的proceed方法還是中斷執行,
實例
基於@AspectJ註解的AOP實現
基於XML配置文件的AOP實現免不了在Spring配置文件中配置大量的信息,不僅配置麻煩,而且造成配置文件的臃腫。AspectJ框架爲AOP的實現提供了一套註解,用以取代Spring配置文件中爲實現AOP功能所配置的臃腫代碼。
關於AspectJ註解的說明如下
- @Aspect:用於定義一個切面
- @Pointcut:用於定義一個切入點
- @Before:用於定義一個前置通知,相當於BeforeAdevice
- @AfterReturning:用於定義一個後置通知,相當於AfterReturningAdvice.
- @AfterThrowing:用於定義一個異常通知,相當於ThrowAdvice
- @Around:用於定義一個環繞通知,相當於MethodInterceptor
- @After:用於定義最終final通知,不管是否異常,該通知都會執行
實例