spring對AOP的代理支持 1、如果目標對象實現了接口,默認情況下會採用JDK的動態代理實現AOP 2、如果目標對象實現了接口,可以強制使用CGLIB實現AOP 3、如果目標對象沒有實現了接口,必須採用CGLIB庫,spring會自動在JDK動態代理和CGLIB之間轉換
如何強制使用CGLIB實現AOP? * 添加CGLIB庫,SPRING_HOME/cglib/*.jar * 在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/> //默認是false,即且jdk動態代理
JDK動態代理和CGLIB字節碼生成的區別? * JDK動態代理只能對實現了接口 的類生成代理,而不能針對類 * CGLIB是針對類 實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法 因爲是繼承,所以該類或方法最好不要聲明成final
實際開發中,推薦用默認的jdk動態代理