當前位置:
首頁 > 知識 > Spring詳解——AspectJ 實現AOP

Spring詳解——AspectJ 實現AOP

1、什麼是 AspectJ?

AspectJ是一個面向切面的框架,它擴展了Java語言。AspectJ定義了AOP語法,也可以說 AspectJ 是一個基於 Java 語言的 AOP 框架。通常我們在使用 Spring AOP 的時候,都會導入 AspectJ 的相關 jar 包。

Spring詳解——AspectJ 實現AOP

在 spring2.0以後,spring新增了對AspectJ 切點表達式的支持;Aspect1.5新增註解功能,通過 JDK5的註解技術,能直接在類中定義切面;新版本的 spring 框架,也都建議使用 AspectJ 來實現 AOP。所以說在 spring AOP 的核心包 Spring-aop-3.2.jar 裡面也有對 AspectJ 的支持。

2、切入點表達式

我們在spring配置文件中配置如下:

Spring詳解——AspectJ 實現AOP

那麼它表達的意思是 返回值任意,包名為 com.ys.aop 下的任意類名中的任意方法名,參數任意。那麼這到底是什麼意思呢?

首先 execution 是 AspectJ 框架定義的一個切入點函數,其語法形式如下:

Spring詳解——AspectJ 實現AOP

簡單點來說就是:

Spring詳解——AspectJ 實現AOP

具體解釋我們用下面一張思維導圖來看:

Spring詳解——AspectJ 實現AOP

請點擊此處輸入圖片描述注意:如果切入點表達式有多個不同目錄呢? 可以通過 || 來表示或的關係。

Spring詳解——AspectJ 實現AOP

表示匹配 com.ys包下的,以 Service1結尾或者以Service2結尾的類的任意方法。

AOP 切入點表達式支持多種形式的定義規則:

Spring詳解——AspectJ 實現AOP

2、Aspect 通知類型

Aspect 通知類型,定義了類型名稱以及方法格式。類型如下:

Spring詳解——AspectJ 實現AOP

這裡最重要的是around,環繞通知,它可以代替上面的任意通知。

在程序中表示的意思如下:

Spring詳解——AspectJ 實現AOP

對應的 jar 包如下:

Spring詳解——AspectJ 實現AOP

我們可以查看源碼:

Spring詳解——AspectJ 實現AOP

Spring詳解——AspectJ 實現AOP

3、AOP具體實例

①、創建介面

Spring詳解——AspectJ 實現AOP

②、創建實現類

Spring詳解——AspectJ 實現AOP

③、創建切面類(包含各種通知)

Spring詳解——AspectJ 實現AOP

④、創建spring配置文件applicationContext.xml

我們首先測試前置通知、後置通知、最終通知

Spring詳解——AspectJ 實現AOP

Spring詳解——AspectJ 實現AOP

⑤、測試

Spring詳解——AspectJ 實現AOP

控制台列印:

Spring詳解——AspectJ 實現AOP

注意,後置通知的返回值為 null,是因為我們的目標方法 addUser() 沒有返回值。如果有返回值,這裡就是addUser() 的返回值。

4、測試異常通知

目標介面保持不變,目標類我們手動引入異常:

Spring詳解——AspectJ 實現AOP

接著配置切面:MyAspect.java

Spring詳解——AspectJ 實現AOP

接著在 applicationContext.xml 中配置如下:

Spring詳解——AspectJ 實現AOP

測試:

Spring詳解——AspectJ 實現AOP

控制台列印:

Spring詳解——AspectJ 實現AOP

5、測試環繞通知

目標介面和目標類保持不變,切面MyAspect 修改如下:

Spring詳解——AspectJ 實現AOP

applicationContext.xml 配置如下:

Spring詳解——AspectJ 實現AOP

測試:

Spring詳解——AspectJ 實現AOP

列印結果:

Spring詳解——AspectJ 實現AOP

那麼至此,通過 xml 配置的方式我們講解了Spring AOP 的配置。

文章摘自博客園


中公優就業 幫你成就職業夢:

IT教育專業培訓:https://www.ujiuye.com/

IT職業在線教育:https://xue.ujiuye.com/

大數據時代下做java開發工程師:https://www.ujiuye.com/zt/java/?wt.bd=lsh11tt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

如何用比較快速的方法掌握Spring的核心!
你們身旁有哪些學霸的傳奇故事?
重磅!社會化媒體電商新人如何紅海逆襲?
深入理解計算機系統——操作系統的抽象概念
MySQL的JOIN——優化實踐之內循環的次數

TAG:IT優就業 |