Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy8 cannot be cast to XXX-------動態代理(proxy-target-class屬性的意義)


動態代理分為兩種,針對接口的動態代理和針對普通類的動態代理,java中的動態代理是真的接口的動態代理,cglib是針對普通類的動態代理,目標javaEE的依賴包和Spring的jar包中已經包含了cglib相關jar包,因此即可以對代理也可以對普通類進行動態代理。

在<aop:config proxy-target-class="true">

</aop:config>加上紅色字體的一段即可

其中proxy-target-class="true/false"屬性,決定是基於接口的還是基於類的代理被創建。如果proxy-target-class 屬性值被設置為true,那么基於類的代理將起作用(這時需要cglib庫)。如果proxy-target-class屬值被設置為false或者這個屬性被省略,那么標准的JDK 基於接口的代理將起作用。

即使你未聲明 proxy-target-class="true" ,但運行類沒有繼承接口,spring也會自動使用CGLIB代理。

高版本spring自動根據運行類選擇 JDK 或 CGLIB 代理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM