Spring詳解——AspectJ 實現AOP
1、什麼是 AspectJ?
AspectJ是一個面向切面的框架,它擴展了Java語言。AspectJ定義了AOP語法,也可以說 AspectJ 是一個基於 Java 語言的 AOP 框架。通常我們在使用 Spring AOP 的時候,都會導入 AspectJ 的相關 jar 包。
在 spring2.0以後,spring新增了對AspectJ 切點表達式的支持;Aspect1.5新增註解功能,通過 JDK5的註解技術,能直接在類中定義切面;新版本的 spring 框架,也都建議使用 AspectJ 來實現 AOP。所以說在 spring AOP 的核心包 Spring-aop-3.2.jar 裡面也有對 AspectJ 的支持。
2、切入點表達式
我們在spring配置文件中配置如下:
那麼它表達的意思是 返回值任意,包名為 com.ys.aop 下的任意類名中的任意方法名,參數任意。那麼這到底是什麼意思呢?首先 execution 是 AspectJ 框架定義的一個切入點函數,其語法形式如下:
簡單點來說就是:
具體解釋我們用下面一張思維導圖來看:
請點擊此處輸入圖片描述注意:如果切入點表達式有多個不同目錄呢? 可以通過 || 來表示或的關係。
表示匹配 com.ys包下的,以 Service1結尾或者以Service2結尾的類的任意方法。
AOP 切入點表達式支持多種形式的定義規則:
2、Aspect 通知類型
Aspect 通知類型,定義了類型名稱以及方法格式。類型如下:
這裡最重要的是around,環繞通知,它可以代替上面的任意通知。
在程序中表示的意思如下:
對應的 jar 包如下:
我們可以查看源碼:
3、AOP具體實例
①、創建介面
②、創建實現類
③、創建切面類(包含各種通知)
④、創建spring配置文件applicationContext.xml
我們首先測試前置通知、後置通知、最終通知
⑤、測試
控制台列印:
注意,後置通知的返回值為 null,是因為我們的目標方法 addUser() 沒有返回值。如果有返回值,這裡就是addUser() 的返回值。
4、測試異常通知
目標介面保持不變,目標類我們手動引入異常:
接著配置切面:MyAspect.java
接著在 applicationContext.xml 中配置如下:
測試:
控制台列印:
5、測試環繞通知
目標介面和目標類保持不變,切面MyAspect 修改如下:
applicationContext.xml 配置如下:
測試:
列印結果:
那麼至此,通過 xml 配置的方式我們講解了Spring AOP 的配置。
文章摘自博客園
中公優就業 幫你成就職業夢:
IT教育專業培訓:https://www.ujiuye.com/
IT職業在線教育:https://xue.ujiuye.com/
大數據時代下做java開發工程師:https://www.ujiuye.com/zt/java/?wt.bd=lsh11tt
※如何用比較快速的方法掌握Spring的核心!
※你們身旁有哪些學霸的傳奇故事?
※重磅!社會化媒體電商新人如何紅海逆襲?
※深入理解計算機系統——操作系統的抽象概念
※MySQL的JOIN——優化實踐之內循環的次數
TAG:IT優就業 |