您好,登錄后才能下訂單哦!
前言:
AOP是目前Spring框架中的核心之一,在應(yīng)用中具有非常重要的作用,也是Spring其他組件的基礎(chǔ)。它是一種面向切面編程的思想。關(guān)于AOP的基礎(chǔ)知識,相信多數(shù)童鞋都已經(jīng)了如指掌,今天要給大家分享的是Spring框架AOP的使用,以及我個人對底層原理的一些理解。
Aop使用步驟
配置aop信息
<aop:config> 相當(dāng)于aop的根節(jié)點
配置切入點
<aop:piontcut> 切入點 可以理解為需要增強的方法的位置
如:
execution( com.mmr.entity.People.(..) )
表示這個切入點的位置在com.mmr.entity.People 這個類里;
第一個星號:表示訪問權(quán)限是任意,也可以設(shè)置為private,protected。。。。。
第二個星號:表示People類下面的所有方法
(..)表示任意參數(shù)
包后面兩個點表示包含子包下面的類,單點不包含子包
配置切入面
<aop:aspect>
ref 指定的是用什么類來增強,指向的是一個bean
配置切入時間
<aop:after>......此類標簽指定切入時間
after---最終 相當(dāng)于try catch 中的finally
after-returning 后置,方法無異常執(zhí)行完后
method 指定用哪個方法來增強(ref中指向的類中的方法)
pointcut-ref 指定增強的切入點
配置示例:
<bean name="people" class="com.mmr.entity.People"></bean>
<bean name = "add" class = "com.mmr.entity.AddMethod"/>
<aop:config>
<aop:pointcut expression="execution( com.mmr.entity.People.(..) )" id="peoplecut"/>
<aop:aspect ref="add">
<aop:after method="after" pointcut-ref="peoplecut"/>
<aop:before method="before" pointcut-ref="peoplecut"/>
<aop:around method="around" pointcut-ref="peoplecut"/>
<aop:after-throwing method="throwing" pointcut-ref="peoplecut"/>
<aop:after-returning method="after_return" pointcut-ref="peoplecut"/>
</aop:aspect>
</aop:config>
注意:
spring Aop 底層采用了動態(tài)代理(jdk自帶的動態(tài)代理 + cglib 動態(tài)代理)的方式來實現(xiàn)增強
所以如果被增強的類(委托類)實現(xiàn)了接口,則會采用jdk自帶的動態(tài)代理方式,所以需要使用接口來接收,不能直接使用實現(xiàn)類接收!
而如果委托類未實現(xiàn)接口,則采用cglib動態(tài)代理的方式,所以可以用委托類直接接收
喜歡這篇文章的話,可以給作者點個喜歡,點下關(guān)注,每天都會分享Java相關(guān)文章!
記得一定要關(guān)注我哦,會不定時的福利贈送,包括整理的面試題,學(xué)習(xí)資料,源碼等~~
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。