動態代理分為兩種,針對接口的動態代理和針對普通類的動態代理,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 代理