代理设计模式
代理设计模式优点
1. 保护真实对象(不见到源码)
2. 职责加强 (增强功能)
3. 扩展 (接口扩展)
代理设计模式
1. 真实对象 (老总)
2. 代理对象 (秘书)
3. 抽象对象(抽象功能)
静态代理设计模式
由代理对象代理所有真实对象的功能
1. 自己编写代理类(特点)
2. 每个代理的功能需要单独编写
动态代理设计模式
为了解决静态代理模式的缺点
分类
1. JDK 动态代理 不需额外jar(JDK自带)
2. cglib 动态代理 需额外jar
JDK和cglib对比
JDK动态代理(false)
优点:
jdk自带 不需要导入额外jar
缺点:
1. 真实对象必须实现接口
2. 利用反射机制(效率不高)
异常:
希望把接口对象 --> 具体真实对象
cglib动态代理(true)
优点:
1. 基于字节码 生成真实对象的子类
2. 运行效率高
3. 不需要实现接口
缺点:
1. 需要导入额外jar
异常:
使用spring aop时,只要出现Proxy和真实对象转换异常
异常解决:
proxy-target-class更改 true(cglib动态代理) / false(JDK动态代理)
配置文件aop标签(配合注解)
1 | <aop:aspectj-autoproxy proxy-target-class="true"> //注解一定要打开true 用更高效的cglib |