代理设计模式
1. 设计模式:
前人总结的一套解决特定问题的代码
2. 代理设计模式优点:
- 保护真实对象
- 让真实对象职责更明确
- 扩展
3. 代理设计模式
- 真实对象.(老总)
- 代理对象(秘书)
- 抽象对象(抽象功能),谈小目标
静态代理设计模式
1. 概念
由代理对象代理所有真实对象的功能
使用方式:
- 自己编写代理类
- 每个代理的功能需要单独编写
2. 静态代理设计模式的缺点
当代理功能比较多时,代理类中方法需要写很多
动态代理
1. 作用
为了解决静态代理频繁编写代理功能缺点
2. 分类
- JDK 提供的
- cglib 动态代理
JDK 动态代理
- 和 cglib 动态代理对比
优点:jdk 自带,不需要额外导入 jar - 缺点:
①真实对象必须实现接口
②利用反射机制.效率不高. - 使用 JDK 动态代理时可能出现下面异常
java.lang.ClassCastException
出现原因:希望把接口对象转换为具体真实对象
cglib 动态代理
- cglib 优点:
①基于字节码,生成真实对象的子类
注:运行效率高于 JDK 动态代理
②不需要实现接口 - cglib 缺点:
非 JDK 功能,需要额外导入 jar(asm,cglib) - 使用 springaop 时,只要出现 Proxy 和真实对象转换异常
①设置为 true 使用 cglib
②设置为 false 使用 jdk(默认值)
<aop:aspectj-autoproxy proxy-target-class="true">
</aop:aspectj-autoproxy>