麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JSP > 正文

Spring AOP代理詳細介紹

2024-09-05 00:22:53
字體:
來源:轉載
供稿:網友

Spring AOP代理詳細介紹

前言:

一開始我對spring AOP還是屬于一知半解的狀態,這幾天遇到一個問題,加上又查看了一些Spring相關知識,感覺對這個問題有了更深刻的認識。所以寫下來分享一下。

我們知道,Spring支持多種AOP方式,Spring自己的基于代理的AOP和AspectJ的基于編織(weaving)的AOP。如果一個類實現了一個或多個接口,那么Spring就會使用默認的JDK動態代理,如果沒有實現任何接口,就會使用cglib來代理。當然我們也可以手動改變這些設置。這也是比較容易掉坑的部分,如果設置錯了代理方式,那么在依賴注入的時候,就會出現BeanNotOfRequiredTypeException。

首先來說說JDK動態代理,這種代理方式會代理接口。具體的說,對象A實現了接口A和接口B。Spring會創建一個代理對象,這個對象實現了接口A和接口B,但是需要注意,代理對象和對象A沒有任何關系。我們可以把代理對象當做任何一個接口來使用,但是無法將代理對象轉換成類A來使用。

假如我們現在有以下一個接口和類。

public interface InterfaceA {}public class ClassA implements InterfaceA {}

然后我們使用依賴注入來獲取對象A的話就只能類型只能為InterfaceA,如果類型寫成ClassA就會出現BeanNotOfRequiredTypeException。因為這里實際注入的對象是一個實現了InterfaceA的代理對象,和ClassA沒有任何關系。這種情況是Spring建議我們的,使用接口來進行編程。如果必須注入類的話,就需要使用cglib來代理,也就是在AOP配置中添加proxy-target-class="true"。

然后再來說說cglib代理。這是一個代理類的方式,所以如果我們使用這種代理,上面的情況下既可以注入ClassA,又可以注入InterfaceA。

最后再來說說AspectJ的基于編織的AOP。所謂編織,就是在生成的類文件中增加或修改代碼,有編譯時編織和運行時編織之分。如果你使用AspectJ并反編譯一個編織了的類,就會發現這個類文件被AspectJ修改了。由于AspectJ的基于編織的特性,所以基于代理的AOP的自引用、兩種代理的問題,在AspectJ中都不會出現。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费观看国产精品视频 | 毛片免费试看 | 欧美中文字幕在线视频 | 国产亚洲美女精品久久久2020 | 少妇一级淫片免费放4p | 亚洲欧洲日韩av | 爱视频福利 | 美国av片在线观看 | 九九热在线精品视频 | 黄色片网站在线免费观看 | 蜜桃成品人免费视频 | 美女露100%无遮挡 | 538任你躁在线精品视频网站 | 久久综合一区二区 | www.99热视频| 亚洲福利视频52 | 国产欧美日韩在线不卡第一页 | 欧美aⅴ在线观看 | 视频国产一区二区 | 久久99精品久久久久久236 | 久久精品伊人网 | 国产精品久久久久久久久久10秀 | 国产99久久精品一区二区300 | 一区在线视频 | 国产99久久久久 | 美女视频黄视大全视频免费网址 | 精品国产一区二区三区四区阿崩 | 日韩欧美电影一区二区三区 | 懂色粉嫩av久婷啪 | 中文字幕激情 | 久久影片 | 日日操夜夜透 | 免费a网 | 国产精品久久久久久久久久久久久久久久 | 成品片a免费直接观看 | 国产精品久久久免费看 | 国产精品99久久久久久大便 | 久久96国产精品久久秘臀 | 国产一区免费在线 | 牛牛热这里只有精品 | 精品国产一区二区久久 |