Spring框架中前置增強(qiáng)的用法

這篇文章主要講解了“Spring框架中前置增強(qiáng)的用法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spring框架中前置增強(qiáng)的用法”吧!

目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、白水網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

在上一篇中我們已經(jīng)通過了動(dòng)態(tài)代理技術(shù)實(shí)現(xiàn)了簡單的AOP功能,但是如果我們細(xì)心觀察就會(huì)發(fā)現(xiàn),通過上一篇中的方式實(shí)現(xiàn)有,幾點(diǎn)明顯需要改進(jìn)的地方,它們分別是:

目標(biāo)類所有的方法都添加了事物管理,而有時(shí)我們只需要在特殊的方法上添加事物即可。例如上一篇中的事例,我們只需要在有寫操作方法上添加事物即可,也就是register方法,而不需要在讀事物上添加事物也就是login方法。

我們通過了硬編碼的方法指定了橫切的邏輯,也就是在目標(biāo)方法開始前和開始后添加了代碼。

我們手動(dòng)創(chuàng)建了代理類,這樣在為不同的類創(chuàng)建代理時(shí),就需要分別編寫相應(yīng)的代碼,無法通用。

要想解決上述問題,解決的辦法就是使用spring為我們提供的增強(qiáng),在其它文章中我們已經(jīng)介紹過了增強(qiáng)就是添加到目標(biāo)類特殊連接點(diǎn)的信息,并且spring為我們提供了的增強(qiáng)都在帶方位信息的,也就是在方法前、方法后等。所以我們可以很方便的使用增強(qiáng)來使我們需要添加事物的方法動(dòng)態(tài)添加織入的功能。下面我們將演示,spring中為我們都提供了哪些增強(qiáng)。

  • 前置增強(qiáng)

顧名思義也就是在目標(biāo)方法執(zhí)行之前添加橫切的邏輯。我們通過下面的用例來演示一下前置增強(qiáng)的具體使用。

Spring框架中前置增強(qiáng)的用法

Spring框架中前置增強(qiáng)的用法

Spring框架中前置增強(qiáng)的用法

Spring框架中前置增強(qiáng)的用法

我們知道spring中的AOP功能底層也是通過JDK動(dòng)態(tài)代理或者使用CGLib動(dòng)態(tài)代理,那么我們上述代碼到底是通過哪種技術(shù)實(shí)現(xiàn)的呢?別著急我們看一下ProxyFactory類的底層實(shí)現(xiàn)。在ProxyFactory類中我們可以通過設(shè)置setInterfaces方法指定使用JDK動(dòng)態(tài)代理。如果是對(duì)類進(jìn)行代理,因?yàn)镴DK代理不支持,所以ProxyFactory就會(huì)采用CGLib動(dòng)態(tài)代理。我們還可以通過setOptimize方法來讓ProxyFactory啟動(dòng)優(yōu)化方式,這樣,即使是對(duì)接口進(jìn)行代理,也會(huì)使用CGLib代理。

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

Spring框架中前置增強(qiáng)的用法

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

Spring框架中前置增強(qiáng)的用法

下面我們通過sping配置文件的方式實(shí)現(xiàn)AOP動(dòng)態(tài)代理功能。

Spring框架中前置增強(qiáng)的用法

Spring框架中前置增強(qiáng)的用法

Spring框架中前置增強(qiáng)的用法

下面我們看一下org.springframework.aop.framework.ProxyFactoryBean類的相關(guān)屬性說明:

  • target: 動(dòng)態(tài)代理的目標(biāo)對(duì)象

  • proxyInterfaces:動(dòng)態(tài)代理所要實(shí)現(xiàn)的接口,如果是用CGLib代理時(shí),可以不設(shè)置此屬性。也可以同時(shí)設(shè)置多個(gè)接口,當(dāng)采用多個(gè)接口時(shí)接口與接口之間用用逗號(hào)分隔。

  • interceptorNames:具有和橫切邏輯的類。

  • singleton: 創(chuàng)建的代理對(duì)象是否是單例對(duì)象,默認(rèn)為單例對(duì)象。

  • optimize: 是否啟用優(yōu)化功能,當(dāng)設(shè)置啟用時(shí),spring采用CGLib動(dòng)態(tài)代理,反之采用JDK動(dòng)態(tài)代理。當(dāng)設(shè)置為true時(shí),可以不設(shè)置proxyInterfaces屬性。

  • proxyTargetClass: 是否對(duì)類進(jìn)行代理,當(dāng)設(shè)置為true時(shí),則采用CGLib動(dòng)態(tài)代理,反之采用JDK動(dòng)態(tài)代理。

感謝各位的閱讀,以上就是“Spring框架中前置增強(qiáng)的用法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Spring框架中前置增強(qiáng)的用法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

分享名稱:Spring框架中前置增強(qiáng)的用法
文章出自:http://bm7419.com/article42/jcidec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)ChatGPT、網(wǎng)站導(dǎo)航品牌網(wǎng)站制作、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司