這篇文章主要講解了“Spring框架中前置增強的用法”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring框架中前置增強的用法”吧!
目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、白水網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
在上一篇中我們已經(jīng)通過了動態(tài)代理技術(shù)實現(xiàn)了簡單的AOP功能,但是如果我們細心觀察就會發(fā)現(xiàn),通過上一篇中的方式實現(xiàn)有,幾點明顯需要改進的地方,它們分別是:
目標類所有的方法都添加了事物管理,而有時我們只需要在特殊的方法上添加事物即可。例如上一篇中的事例,我們只需要在有寫操作方法上添加事物即可,也就是register方法,而不需要在讀事物上添加事物也就是login方法。
我們通過了硬編碼的方法指定了橫切的邏輯,也就是在目標方法開始前和開始后添加了代碼。
我們手動創(chuàng)建了代理類,這樣在為不同的類創(chuàng)建代理時,就需要分別編寫相應的代碼,無法通用。
要想解決上述問題,解決的辦法就是使用spring為我們提供的增強,在其它文章中我們已經(jīng)介紹過了增強就是添加到目標類特殊連接點的信息,并且spring為我們提供了的增強都在帶方位信息的,也就是在方法前、方法后等。所以我們可以很方便的使用增強來使我們需要添加事物的方法動態(tài)添加織入的功能。下面我們將演示,spring中為我們都提供了哪些增強。
前置增強
顧名思義也就是在目標方法執(zhí)行之前添加橫切的邏輯。我們通過下面的用例來演示一下前置增強的具體使用。
我們知道spring中的AOP功能底層也是通過JDK動態(tài)代理或者使用CGLib動態(tài)代理,那么我們上述代碼到底是通過哪種技術(shù)實現(xiàn)的呢?別著急我們看一下ProxyFactory類的底層實現(xiàn)。在ProxyFactory類中我們可以通過設(shè)置setInterfaces方法指定使用JDK動態(tài)代理。如果是對類進行代理,因為JDK代理不支持,所以ProxyFactory就會采用CGLib動態(tài)代理。我們還可以通過setOptimize方法來讓ProxyFactory啟動優(yōu)化方式,這樣,即使是對接口進行代理,也會使用CGLib代理。
JDK動態(tài)代理
CGLib動態(tài)代理
下面我們通過sping配置文件的方式實現(xiàn)AOP動態(tài)代理功能。
下面我們看一下org.springframework.aop.framework.ProxyFactoryBean類的相關(guān)屬性說明:
target: 動態(tài)代理的目標對象
proxyInterfaces:動態(tài)代理所要實現(xiàn)的接口,如果是用CGLib代理時,可以不設(shè)置此屬性。也可以同時設(shè)置多個接口,當采用多個接口時接口與接口之間用用逗號分隔。
interceptorNames:具有和橫切邏輯的類。
singleton: 創(chuàng)建的代理對象是否是單例對象,默認為單例對象。
optimize: 是否啟用優(yōu)化功能,當設(shè)置啟用時,spring采用CGLib動態(tài)代理,反之采用JDK動態(tài)代理。當設(shè)置為true時,可以不設(shè)置proxyInterfaces屬性。
proxyTargetClass: 是否對類進行代理,當設(shè)置為true時,則采用CGLib動態(tài)代理,反之采用JDK動態(tài)代理。
感謝各位的閱讀,以上就是“Spring框架中前置增強的用法”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Spring框架中前置增強的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!