Spring中AOP,@Aspect、@Pointcut優化冗餘代碼,不用在controller寫重複代碼了。

一、定義一個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日誌。


以爲寫得好,給一個贊哇!謝謝!
相關文章
相關標籤/搜索