Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy8 cannot be cast to XXX

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

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

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

其中proxy-target-class="true/false"屬性,決定是基於接口的仍是基於類的代理被建立。若是proxy-target-class 屬性值被設置爲true,那麼基於類的代理將起做用(這時須要cglib庫)。若是proxy-target-class屬值被設置爲false或者這個屬性被省略,那麼標準的JDK 基於接口的代理將起做用。spa

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

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

相關文章
相關標籤/搜索