一、定義一個PointCut切入點:
註解:@PointCut表示切入點,value表示切入點的做用範圍 前端
二、定義一個Aspect切面:
註解:@Aspect 表示聲明一個切面;
@Before,前置加強,方法執行前調用
@Around,環繞加強:方法正常執行先後調用
@AfterReturning,後置加強:方法正常退出時執行
@AfterThrowing,異常拋出加強:方法拋異常時執行
@After,final加強:無論是拋出異常或者正常退出都會執行
測試
在@Around標註的方法中,proceed()方法必須寫,proceed()方法將會調用url觸發的controller層的方法。url
針對異常處理,結果返回前端,能夠在@AfterThrowing註解標記的方法中調用處理結果,返回前端;如圖中的writeContent()方法。
其中features參數爲Json格式化時,須要保留的格式參數。
綜上,在@Around註解標記的方法中,也能夠調用writeContent()方法來返回正確的數據給前端。
即:在註解@AfterThrowing、@Around處,都調用writeContent()來處理正常結果,或者異常結果給前端。 則至關於將controller層給前端的數據處理、異常處理、日誌處理等,都交給AOP來處理,而且只需寫一次,則可供全部的controller層代碼共用,不再用在每一個controller中、每一個method中寫重複的數據處理、異常處理、日誌處理等信息。
三、controller測試
此爲controller的測試代碼。UserEntity類爲本身定義的一個實體類。
四、正常狀況運行結果:
五、異常狀況運行結果:
總結:
利用AOP來處理,讓開發只關注業務邏輯,不用再重複每次url請求的數據處理、異常處理、try catch、log日誌。
以爲寫得好,給一個贊哇!謝謝!