文章插图
代理模式的定义
代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问 。
代理对象在客服端和目标对象之间起到中介作用 。
属于结构型设计模式 。
生活中的代理模式
代理模式的适用场景
保护目标对象
增强目标对象
静态代理
显式声明被代理对象
动态代理
动态配置和替换被代理对象
JDK动态代理的实现原理
1、拿到被代理类的引用,并且获取它的所有的接口(反射获取) 。
2、JDK Proxy类重新生成一个新的类,实现了被代理类所有接口的方法 。
3、动态生成Java代码,把增强逻辑加入到新生成代码中 。
4、编译生成新的Java代码的class文件 。
5、加载并重新运行新的class,得到类就是全新类 。
CGLib动态代理容易踩的坑
1、无法代理final修饰的方法
CGLib和JDK动态代理对比
1.JDK动态代理是实现了被代理对象的接口,CGLib是继承了被代理对象 。
2.JDK和CGLib都是在运行期生成字节码,JDK是直接写Class字节码,CGLib使用ASM框架写Class字节码,Cglib代理实现更复杂,生成代理类比JDK效率低 。
3.JDK调用代理方法,是通过反射机制调用,CGLib是通过
FastClass机制直接调用方法,CGLib执行效率更高.
代理模式的优点
代理模式能将代理对象与真实被调用的目标对象分离 。
一定程度上降低了系统的耦合程度,易于扩展 。
代理可以起到保护目标对象的作用 。
增强目标对象的职责
代理模式的缺点
代理模式会造成系统设计种类的数目增加
在客户端和目标对象之间增加了一个代理对象,会造成请求处理速度变慢 。
增加了系统的复杂度 。
Spring中的代理选择原则
1、当Bean有实现接口时,Spring就会用JDK的动态代理 。
2、当Bean没有实现接口时,Spring选择CGLib 。
3、Spring可以通过配置强制使用CGLib,只需在Spring的配置文件中加入如下代码:
<aop:aspectj-autoproxy proxy-target-class=”true”/>
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 首页被K一般恢复的时间 网站首页被k怎样才能恢复
- 北京烤鸭是从南京传过去的吗 北京烤鸭和南京烤鸭的区别
- 自考本科容易的专业 自考学费一般为多少
- 酷睿i3十代是什么水平 酷睿2双核和i3哪个好
- 附专家解读 国庆和中秋节同一天多少年一次
- 学区房一般多少钱,学区房贵还是便宜
- 春节假期全国共揽收和投递快递包裹7.49亿件
- 玻璃钢化粪池的费用一般是多少 玻璃钢化粪池价格多少
- 畚箕和簸箕 读音 簸箕的读音
- cognac是什么酒