Spring-AOP

AOP的概念

面向切面的編程,切面用于描述分散在對象、類或者函數(shù)中的橫向關(guān)注點(diǎn),通過分離這些關(guān)注點(diǎn),把解決特定領(lǐng)域問題的代碼從業(yè)務(wù)邏輯中獨(dú)立出來,他們之間的關(guān)系通過切面來維護(hù)。效果是保證程序員在不修改源代碼的情況下,為系統(tǒng)中業(yè)務(wù)組件的多個(gè)業(yè)務(wù)方法添加某種通用功能。

組成:

  • 切面:要實(shí)現(xiàn)的功能,是系統(tǒng)模塊化的一個(gè)切面或領(lǐng)域。如調(diào)用時(shí)間。
  • 通知:切面的實(shí)際實(shí)現(xiàn),他通知系統(tǒng)新的行為。通知在連接點(diǎn)插入到系統(tǒng)中。
  • 連接點(diǎn):應(yīng)用程序執(zhí)行過程中插入切面的地點(diǎn)。連接點(diǎn)如下


  • 切入點(diǎn):定義了通知應(yīng)該應(yīng)用在哪些連接點(diǎn)上,通知可以應(yīng)用在aop框架支持的任何連接點(diǎn)??梢赃@樣理解,切入點(diǎn)就是當(dāng)通知插入到某個(gè)連接點(diǎn)時(shí),這個(gè)連接點(diǎn)就成了切入點(diǎn)。
  • 引入:為類添加新方法和屬性
  • 目標(biāo)對象:被通知的對象,既可以是被通知的類,也可以是第三方類。
  • 代理:將通知應(yīng)用到目標(biāo)對象之后創(chuàng)建的對象,應(yīng)用系統(tǒng)的其他部分不用為了支持代理對象而改變。
  • 織入:將切面應(yīng)用到目標(biāo)對象從而創(chuàng)建的一個(gè)新的對象的過程,織入發(fā)生在目標(biāo)對象生命周期的多個(gè)點(diǎn)上。

AOP實(shí)現(xiàn)原理

分為靜態(tài)實(shí)現(xiàn)和動(dòng)態(tài)實(shí)現(xiàn),動(dòng)態(tài)實(shí)現(xiàn)要比動(dòng)態(tài)實(shí)現(xiàn)效率高,因?yàn)橐粋€(gè)動(dòng)態(tài)代理能代理多個(gè)實(shí)現(xiàn)了指定接口的對象(目標(biāo)對象),而靜態(tài)代理,需要為每一個(gè)目標(biāo)對象都寫一個(gè)代理類,重復(fù)代碼。

1.靜態(tài)實(shí)現(xiàn),在編譯階段對程序進(jìn)行修改,生成代理類,AspectJ
2.動(dòng)態(tài)實(shí)現(xiàn),運(yùn)行階段動(dòng)態(tài)生成,在Spring AOP中有兩種代理方式,JDK動(dòng)態(tài)代理和CGLIB代理。默認(rèn)情況下,目標(biāo)對象實(shí)現(xiàn)了接口時(shí),則采用JDK動(dòng)態(tài)代理其接口,反之,采用CGLIB代理。

JDK動(dòng)態(tài)代理示例



AOP的使用示例

示例


execution用來匹配方法


參考鏈接
其他切入點(diǎn)表達(dá)式http://blog.csdn.net/wangpeng047/article/details/8556800

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容