您好,登錄后才能下訂單哦!
這篇文章主要講解了“Spring框架中前置增強的用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring框架中前置增強的用法”吧!
在上一篇中我們已經通過了動態代理技術實現了簡單的AOP功能,但是如果我們細心觀察就會發現,通過上一篇中的方式實現有,幾點明顯需要改進的地方,它們分別是:
目標類所有的方法都添加了事物管理,而有時我們只需要在特殊的方法上添加事物即可。例如上一篇中的事例,我們只需要在有寫操作方法上添加事物即可,也就是register方法,而不需要在讀事物上添加事物也就是login方法。
我們通過了硬編碼的方法指定了橫切的邏輯,也就是在目標方法開始前和開始后添加了代碼。
我們手動創建了代理類,這樣在為不同的類創建代理時,就需要分別編寫相應的代碼,無法通用。
要想解決上述問題,解決的辦法就是使用spring為我們提供的增強,在其它文章中我們已經介紹過了增強就是添加到目標類特殊連接點的信息,并且spring為我們提供了的增強都在帶方位信息的,也就是在方法前、方法后等。所以我們可以很方便的使用增強來使我們需要添加事物的方法動態添加織入的功能。下面我們將演示,spring中為我們都提供了哪些增強。
前置增強
顧名思義也就是在目標方法執行之前添加橫切的邏輯。我們通過下面的用例來演示一下前置增強的具體使用。
我們知道spring中的AOP功能底層也是通過JDK動態代理或者使用CGLib動態代理,那么我們上述代碼到底是通過哪種技術實現的呢?別著急我們看一下ProxyFactory類的底層實現。在ProxyFactory類中我們可以通過設置setInterfaces方法指定使用JDK動態代理。如果是對類進行代理,因為JDK代理不支持,所以ProxyFactory就會采用CGLib動態代理。我們還可以通過setOptimize方法來讓ProxyFactory啟動優化方式,這樣,即使是對接口進行代理,也會使用CGLib代理。
JDK動態代理
CGLib動態代理
下面我們通過sping配置文件的方式實現AOP動態代理功能。
下面我們看一下org.springframework.aop.framework.ProxyFactoryBean類的相關屬性說明:
target: 動態代理的目標對象
proxyInterfaces:動態代理所要實現的接口,如果是用CGLib代理時,可以不設置此屬性。也可以同時設置多個接口,當采用多個接口時接口與接口之間用用逗號分隔。
interceptorNames:具有和橫切邏輯的類。
singleton: 創建的代理對象是否是單例對象,默認為單例對象。
optimize: 是否啟用優化功能,當設置啟用時,spring采用CGLib動態代理,反之采用JDK動態代理。當設置為true時,可以不設置proxyInterfaces屬性。
proxyTargetClass: 是否對類進行代理,當設置為true時,則采用CGLib動態代理,反之采用JDK動態代理。
感謝各位的閱讀,以上就是“Spring框架中前置增強的用法”的內容了,經過本文的學習后,相信大家對Spring框架中前置增強的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。