文章目錄
- 靜態代理VS動態代理
- Spring實現代理
- ProxyFactory
- 工作中遇到問題整理
- 動態代理異常com.sun.proxy.$Proxy0 cannot be cast to
靜態代理VS動態代理
靜態代理VS動態代理
參考URL: https://blog.csdn.net/qq_25881443/article/details/103245938
【java項目實戰】代理模式(Proxy Pattern),靜態代理 VS 動態代理
參考URL: https://blog.csdn.net/jiuqiyuliang/article/details/38423811
代理:不用改變源碼而增強方法
動態代理有AOP的思想,面向切面編程,基于方法的切面
-
靜態代理:
資源類接口UserManager實現類UserManagerImp 增刪查改方法
代理類UserManagerImpProxy 增強方法 -> 增刪查改的前后通知
代碼冗余,需要為每個類都寫一個代理類對象 -
動態代理
只寫一個代理類,通過反射機制實現動態代理
需要java.lang.reflect.InvocationHandler接口和 java.lang.reflect.Proxy 類的支持
Spring實現代理
JDK、CGLIB、Spring 三種實現代理的區別(三)Spring的ProxyFactory
參考URL: https://blog.csdn.net/sunnycoco05/article/details/78901449
為了讓大家理解Spring Aop利器ProxyFactory,我已經拼了
參考URL: https://baijiahao.baidu.com/s?id=1659872326546139979&wfr=spider&for=pc
Spring中代理對象可通過xml配置方式獲得,也可通過ProxyFactory手動編程方式創建對象。我們主要講手動編程的方式。Spring中的代理對象其實是JDK Proxy和CGLIB Proxy 的結合。
ProxyFactory
ProxyFactory就springAOP創建代理的工廠
ProxyFactory,全稱:org.springframework.aop.framework.ProxyFactory,spring帝國spring aop軍工廠boss,職責就是生產proxy,即,代理工廠。
工作中遇到問題整理
動態代理異常com.sun.proxy.$Proxy0 cannot be cast to
動態代理異常com.sun.proxy.$Proxy0 cannot be cast to
參考 https://blog.csdn.net/Tritoy/article/details/81019956
意思大致是說com.sun.proxy.$Proxy0不能進行強制轉換…
jdk動態代理的過程中,生成動態代理對象與目標對象要是同一個接口:也就是說在使用動態代理時,用來生成代理的委托對象必須是一個接口。
改錯后:
public class Dog implements DogI{public void say() {System.out.println("miaomiaomiao");}
public static void main(String[] args) {DogI dog = (DogI)new DogJDKPROXY().getProxyObject(new Dog());dog.say();}
Dog是繼承了DogI接口的。