文章目录
-
- 静态代理VS动态代理
- Spring实现代理
- 工作中遇到问题整理
-
- [动态代理异常com.sun.proxy.Proxy0 cannot be cast to](#动态代理异常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动态代理的过程中,生成动态代理对象与目标对象要是同一个接口:也就是说在使用动态代理时,用来生成代理的委托对象必须是一个接口。
改错后:
java
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接口的。