溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java的Spring?AOP怎么用

發(fā)布時(shí)間:2022-02-22 13:39:00 來(lái)源:億速云 閱讀:148 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹Java的Spring AOP怎么用,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

    什么是AOP&作用

    • AOP 為 Aspect Oriented Programming 的縮寫(xiě),意思為面向切面編程,是通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。

    • AOP 是 OOP 的延續(xù),是函數(shù)式編程的一種衍生范型。利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開(kāi)發(fā)的效率

    • 作用:在程序運(yùn)行期間,在不修改源碼的情況下對(duì)方法進(jìn)行功能增強(qiáng)

    AOP的動(dòng)態(tài)代理技術(shù)

    • 常用的動(dòng)態(tài)代理技術(shù)

    1.JDK代理,基于接口的動(dòng)態(tài)代理

    Java的Spring?AOP怎么用

    2.cglib代理,基于父類(lèi)的動(dòng)態(tài)代理技術(shù)

    Java的Spring?AOP怎么用

    基于JDK的動(dòng)態(tài)代理

    動(dòng)態(tài)代理的實(shí)現(xiàn)

    Java的Spring?AOP怎么用

    單獨(dú)實(shí)現(xiàn)增強(qiáng)方法

    Java的Spring?AOP怎么用

    running方法

    Java的Spring?AOP怎么用

    cglib動(dòng)態(tài)代理

    不需要寫(xiě)接口文件其他增強(qiáng)方法,目標(biāo)方法復(fù)制

    Java的Spring?AOP怎么用

    AOP相關(guān)概念

    Target(目標(biāo)對(duì)象):代理的目標(biāo)對(duì)象

    Proxy (代理):一個(gè)類(lèi)被 AOP 織入增強(qiáng)后,就產(chǎn)生一個(gè)結(jié)果代理類(lèi)

    Joinpoint(連接點(diǎn)):所謂連接點(diǎn)是指那些被攔截到的點(diǎn)。在spring中,這些點(diǎn)指的是方法,因?yàn)閟pring只支持方法類(lèi)型的連接點(diǎn)

    Pointcut(切入點(diǎn)):所謂切入點(diǎn)是指我們要對(duì)哪些 Joinpoint 進(jìn)行攔截的定義

    Advice(通知/ 增強(qiáng)):所謂通知是指攔截到 Joinpoint 之后所要做的事情就是通知

    Aspect(切面):是切入點(diǎn)和通知(引介)的結(jié)合

    Weaving(織入):是指把增強(qiáng)應(yīng)用到目標(biāo)對(duì)象來(lái)創(chuàng)建新的代理對(duì)象的過(guò)程。spring采用動(dòng)態(tài)代理織入,而AspectJ采用編譯期織入和類(lèi)裝載期織入

    AOP開(kāi)發(fā)明確事項(xiàng)

    需要編寫(xiě)的內(nèi)容

    • 編寫(xiě)業(yè)務(wù)核心代碼(目標(biāo)方法)

    • 編寫(xiě)切面類(lèi)(增強(qiáng)功能方法)

    • 在配置文件中。配置織入關(guān)系

    AOP技術(shù)實(shí)現(xiàn)的內(nèi)容

    Spring 框架監(jiān)控切入點(diǎn)方法的執(zhí)行。一旦監(jiān)控到切入點(diǎn)方法被運(yùn)行,使用代理機(jī)制,動(dòng)態(tài)創(chuàng)建目標(biāo)對(duì)象的代理對(duì)象,根據(jù)通知類(lèi)別,在代理對(duì)象的對(duì)應(yīng)位置,將通知對(duì)應(yīng)的功能織入,完成完整的代碼邏輯運(yùn)行。

    AOP 底層使用哪種代理方式

    在 spring 中,框架會(huì)根據(jù)目標(biāo)類(lèi)是否實(shí)現(xiàn)了接口來(lái)決定采用哪種動(dòng)態(tài)代理的方式(jdk是接口代理 cglib是不需要接口的)

    基于XML的AOP開(kāi)發(fā)

    導(dǎo)入AOP相關(guān)坐標(biāo)

    Java的Spring?AOP怎么用

    創(chuàng)建目標(biāo)接口和目標(biāo)類(lèi)

    Java的Spring?AOP怎么用

    Java的Spring?AOP怎么用

    創(chuàng)建切面類(lèi)

    Java的Spring?AOP怎么用

    將目標(biāo)類(lèi)和切面類(lèi)的對(duì)象創(chuàng)建權(quán)交給Spring

    在applicationContext.xml中配置織入關(guān)系

    Java的Spring?AOP怎么用

    測(cè)試代碼

    Java的Spring?AOP怎么用

    切面表達(dá)式

    • 表達(dá)式語(yǔ)法

    execution([修飾符] 返回值類(lèi)型 包名.類(lèi)名.方法名(參數(shù)))

    execution(public void com.itheima.aop.Target.method())

    訪問(wèn)修飾符可以省略

    execution(void com.itheima.aop.Target.*(..))

    包名與類(lèi)名之間一個(gè)點(diǎn) . 代表當(dāng)前包下的類(lèi),兩個(gè)點(diǎn) … 表示當(dāng)前包及其子包下的類(lèi)

    execution(* com.itheima.aop.*.*(..))

    參數(shù)列表可以使用兩個(gè)點(diǎn) … 表示任意個(gè)數(shù),任意類(lèi)型的參數(shù)列表

    execution(* com.itheima.aop..*.*(..))

    通知類(lèi)型

    Java的Spring?AOP怎么用

    Java的Spring?AOP怎么用

    Java的Spring?AOP怎么用

    切點(diǎn)表達(dá)式抽取

    Java的Spring?AOP怎么用

    基于注解的AOP開(kāi)發(fā)

    創(chuàng)建目標(biāo)接口和目標(biāo)類(lèi)(內(nèi)部有切點(diǎn))

    Java的Spring?AOP怎么用

    創(chuàng)建切面類(lèi)(內(nèi)部有增強(qiáng)方法)

    Java的Spring?AOP怎么用

    將目標(biāo)類(lèi)和切面類(lèi)的對(duì)象創(chuàng)建權(quán)交給Spring 在切面類(lèi)中使用注解配置織入關(guān)系 在配置文件中開(kāi)啟組件掃描和AOP自動(dòng)代理

    Java的Spring?AOP怎么用

    測(cè)試

    Java的Spring?AOP怎么用

    注解通知類(lèi)型和切面表達(dá)式的抽取

    類(lèi)型

    Java的Spring?AOP怎么用

    Java的Spring?AOP怎么用

    抽取表達(dá)式

    Java的Spring?AOP怎么用

    以上是“Java的Spring AOP怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI