濮阳杆衣贸易有限公司

主頁 > 知識庫 > Spring AOP代理詳細介紹

Spring AOP代理詳細介紹

熱門標簽:百度地圖添加標注圖標樣式 如何用中國地圖標注數(shù)字點 南昌市地圖標注app 南京新思維電話機器人 地圖標注市場怎么樣 好操作的電話機器人廠家 泰州泰興400電話 怎么申請 聊城智能電銷機器人外呼 企業(yè)怎么在聯(lián)通申請400電話

Spring AOP代理詳細介紹

前言:

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

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

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

假如我們現(xiàn)在有以下一個接口和類。

public interface InterfaceA {
}

public class ClassA implements InterfaceA {
}

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

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

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

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

您可能感興趣的文章:
  • Spring基于ProxyFactoryBean創(chuàng)建AOP代理
  • Spring溫故而知新系列教程之AOP代理
  • Spring-AOP自動創(chuàng)建代理之BeanNameAutoProxyCreator實例
  • 詳解Java反射實現(xiàn)Aop代理
  • 帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理

標簽:山南 白銀 吉林 烏蘭察布 銅川 臨汾 開封 自貢

巨人網(wǎng)絡通訊聲明:本文標題《Spring AOP代理詳細介紹》,本文關鍵詞  Spring,AOP,代理,詳細,介紹,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Spring AOP代理詳細介紹》相關的同類信息!
  • 本頁收集關于Spring AOP代理詳細介紹的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    上杭县| 永安市| 呼图壁县| 苏州市| 穆棱市| 南城县| 喀喇沁旗| 五原县| 伊宁县| 洛扎县| 博客| 恭城| 无棣县| 区。| 平远县| 祁东县| 漳州市| 苏尼特右旗| 额尔古纳市| 乡宁县| 胶州市| 三门峡市| 囊谦县| 德兴市| 兴义市| 金华市| 怀安县| 宁蒗| 商丘市| 招远市| 石泉县| 辽阳县| 正蓝旗| 屯门区| 万山特区| 兴安盟| 南靖县| 双鸭山市| 同仁县| 罗江县| 铁力市|