title: Spring aop理解幫助文檔
程序員小白一只,現(xiàn)在還在學(xué)習(xí)中,關(guān)于AOP的一些東西有自己的理解,暫時記錄一下=0=
### 1.AOP面向切面編程的術(shù)語解釋
AOP實際上也就是Spring框架為我們實現(xiàn)了動態(tài)代理;在不更改源代碼的情況下對方法進行增強;所以也就分成了被增強類與增強類兩個類,我們可以把這兩個抽象的概念想象成兩條單鏈的DNA,來具體化,方便理解;
* 以下是針對術(shù)語的解釋;
Joinpoint:(連接點)被代理的對象所有的方法都是連接點,
(假如,我們把兩個對象想象成兩條單鏈DNA,被增強類上的所有方法(被配對的單鏈DNA上面的所有連接口就是連接點))
Pointcut:(切入點)被代理對象所有被增強的方法就是切入點
(假如,我們把兩個對象想象成兩條單鏈DNA,兩個DNA配對的過程中,完成配對的連接點就是切入點)
Advice:(通知/增強)就是增強的方法(假如,我們把兩個對象想象成兩條單鏈DNA,把方法想象成DNA上的節(jié)點,那么去增強其他單鏈DNA的單鏈DNA上的節(jié)點就是增強)
Target:目標(biāo)對象,(假如,我們把兩個想象成兩條單鏈DNA,被配對的那個單鏈DNA就是目標(biāo)對象)
Weaving:(織入)把增強應(yīng)用到目標(biāo)對象的過程;(假如,我們把兩個想象成兩條單鏈DNA,兩個DNA配對的過程就是織入)
Proxy:代理對象,一個對象被代理成功之后返回的對象(假如,我們把兩個想象成兩條單鏈DNA,配對成功之后的雙鏈DNA就是Proxy)
Aspect:就是切入點和通知的結(jié)合面(假如,我們把兩個想象成兩條單鏈DNA,兩個DNA配對完成之后的DNA鏈中間的面,就是切面)
* 針對配置文件中配置aop的理解
1.把通知bean也交給spring來管理(生成一條用于增強的DNA鏈)
2.aop:config便是開始配置aop的配置(開始配對)
3.aop:aspect 表明配置切面(生成切面)
id:給切面提供一個唯一的標(biāo)識(表示切面的編號)
ref:指定通知類bean的id(增強的DNA鏈的編號)
order:連接的執(zhí)行順序;默認(rèn)值是Interage的最大值,一般不指定
4.在.aop:aspect的標(biāo)簽內(nèi)部使用對應(yīng)標(biāo)簽來配置通知的類型
我們現(xiàn)在讓通知類在被增強的方法前執(zhí)行,所以是前置通知
aop:before表示的是配置前置通知(旋轉(zhuǎn)增強的DNA鏈的增強方法,配置執(zhí)行順序)
method屬性 就是制定通知類中哪個方法是前置通知(指定用增強DNA中哪個方法(節(jié)點)去增強)
pointcut屬性:用于指定切入點表達式,該表帶是的含義就是指的是對被代理層的哪些方法增強(指定去增強目標(biāo)DNA鏈的哪個方法(節(jié)點))
切入點表達式的寫法:
關(guān)鍵字:execution(表達式)
* 表達式的寫法:
表達式:
訪問修飾符 返回值 包名.包名....類名.方法名(參數(shù)列表)
? ? ? ? ? ? ? ? 訪問修飾符可以省略
? ? ? ? ? ? ? ? ? ? void com.itheima.service.impl.AccountServiceImpl.saveAccount()
? ? ? ? ? ? ? ? 返回值可以使用通配符,表示任意返回值
? ? ? ? ? ? ? ? ? ? * com.itheima.service.impl.AccountServiceImpl.saveAccount()
? ? ? ? ? ? ? ? 包名可以使用通配符,表示任意包。但是有幾級包,就需要寫幾個*.
? ? ? ? ? ? ? ? ? ? * *.*.*.*.AccountServiceImpl.saveAccount())
? ? ? ? ? ? ? ? 包名可以使用..表示當(dāng)前包及其子包
? ? ? ? ? ? ? ? ? ? * *..AccountServiceImpl.saveAccount()
? ? ? ? ? ? ? ? 類名和方法名都可以使用*來實現(xiàn)通配
? ? ? ? ? ? ? ? ? ? * *..*.*()
? ? ? ? ? ? ? ? 參數(shù)列表:
? ? ? ? ? ? ? ? ? ? 可以直接寫數(shù)據(jù)類型:
? ? ? ? ? ? ? ? ? ? ? ? 基本類型直接寫名稱? ? ? ? ? int
? ? ? ? ? ? ? ? ? ? ? ? 引用類型寫包名.類名的方式? java.lang.String
? ? ? ? ? ? ? ? ? ? 可以使用通配符表示任意類型,但是必須有參數(shù)
? ? ? ? ? ? ? ? ? ? 可以使用..表示有無參數(shù)均可,有參數(shù)可以是任意類型
? ? ? ? ? ? ? ? 全通配寫法:
? ? ? ? ? ? ? ? ? ? * *..*.*(..)
? ? ? ? ? ? ? ? 實際開發(fā)中切入點表達式的通常寫法:
? ? ? ? ? ? ? ? ? ? 切到業(yè)務(wù)層實現(xiàn)類下的所有方法
? ? ? ? ? ? ? ? ? ? ? ? *** com.itheima.service.impl.*.*(..)**