11-SpringAOP-關於切點和織入說明(JDK和CGLIB再也不迷糊)

1,切點的說明,我們在上篇文章中使用正則表達式定義了切點,在此我對這段正則表達式做一個說明,幫助沒基礎的同學方便理解。

execution(* com.spring.aop.UserServiceImpl.showUser(..))

execution:表示執行這個方法的時候會觸發

*:表示任意返回類型的方法

com.spring.aop.UserServiceImpl:表示全類名

showUser:表示被攔截的方法

(..):表示任意的參數

2,織入的理解

什麼是織入,織入是我們一個形象的比喻,大家可以搜索下織布機,看看織布機的一個工作方式,會有更感性的認識;那麼在Spring中,織入是指生成代理對象並將切面邏輯放入約定流程的過程。

關於生成代理對象,Spring的規則如下:

當類的實現存在接口時,採用JDK實現動態代理;

如果沒有接口,則採用CGLIB的方式來生成代理;

我們可以通過debug模式,來觀察這其中的結果:

11-SpringAOP-關於切點和織入說明(JDK和CGLIB再也不迷糊)

而如果我們將這個接口的關係去掉,我們再一次斷點跟蹤,來看結果:

11-SpringAOP-關於切點和織入說明(JDK和CGLIB再也不迷糊)


分享到:


相關文章: