Spring Boot使用AOP
AOP的強大毋庸置疑,一個切面有5種通知,前置、後置、後置返回、後置異常、環繞。
Talk is cheap.Show U my code!
上代碼
pom.xml
pom.xml
因為個人比較喜歡Gson,所以用這個,不過實際工作中還是推薦阿里的fastjson。
前置
Controller代碼
Controller
AOP代碼
前置
頁面
頁面
日誌
日誌
在實際工作中,前置通知可以做許多事情,比如通過Session校驗用戶是否登錄,登錄的用戶是否有許可權,無狀態的請求可以校驗Token,或者通過全局ID保證介面冪等性等。
修改一下前置通知
修改後前置
日誌
日誌
後置
AOP代碼
後置
日誌
日誌
後置返回
AOP代碼
後置返回
日誌
日誌
新增一個Controller方法
Controller
頁面
頁面
日誌
後置返回
注意對比二者後置返回通知日誌的不同。
第一個請求,返回了HelloRes類,所以AOP參數為Object、HelloRes的兩個後置返回通知都執行了。
第二個請求,返回String,所以AOP只執行了參數為Object的後置返回通知。
後置異常
Controller代碼
Controller
AOP代碼
後置異常
頁面
頁面
日誌
日誌
因為發生了異常,所以後置返回通知不執行了。
新增一個Controller方法
Controller
頁面
頁面
日誌
後置異常
注意對比二者後置異常通知日誌的不同。
第一個請求,返回了空指針異常,所以AOP參數為Throwable、NullPointerException的兩個後置異常通知都執行了。
第二個請求,返回下標越界異常,所以AOP只執行了參數為Throwable的後置異常通知。
環繞
這個才最強大!
AOP代碼
環繞
頁面
頁面
注意返回的recode和restr與之前的不同,裡面的值被AOP修改了。
日誌
日誌
把Controller之前拋異常的方法修改返回值
Controller
頁面
頁面
日誌
日誌
這其實給了我們一個思路:把所有返回數據用一個通用的類封裝起來,通過環繞通知進行統一處理,這樣我們的業務開發人員就不必考慮異常處理的事情了。
※Spring Boot自定義Logback
※Docker掛載主機目錄(基於Tomcat)
※Docker與主機互傳文件(基於Tomcat)
※Spring Cloud Feign重試
※構建運行Spring Boot的Docker
TAG:Java個人學習心得 |