设计模式-代理模式
常见设计模式分三大类:
- 创建模式:
工厂方法, 抽象工厂, 建造模式, 原型模式, 单例模式5种. - 结构模式:
适配器模式, 桥梁模式, 代理模式, 装饰模式, 门面模式5种. - 行为模式:
模板模式, 迭代器模式, 观察者模式, 状态模式, 策略模式5种.
代理模式
代理可以实现给原有的方法增加逻辑,隐藏具体实现的复杂细节等.JDK从1.3版本开始就引入了动态代理并且经常用来动态的创建代理,但是JDK的代理依赖接口这点对于某些应用场景下带来了局限性.还好还有一种叫做cglib的包通过字节码增强(依赖字节码处理框架ASM)的方式现实了代理.
性能:在生成代理的操作jdk默认的动态代理性能是cglib的好多倍左右,可能这也是为什么spring默认使用jdk代理的原因.但是执行速度cglib时jdk代理快的多.所以大家在使用spring管理bean的使用可以根据scope的设置来配合代理包的使用,spring的scope为prototype时为了延迟实例化bean建议使用jdk默认代理;为singleton时单例默认启动的时候就实例化对象了所以建议使用cglib代理.
jdk提供的动态代理:
1 | package com.xh.model.proxy; |
jdk动态代理依赖接口Spring的Bean容器默认使用的就是jdk动态代理,所以Controller层常换成cglib方式代理还有spring的aop面向切面没有接口依赖所以也是使用cglib代理.多说句在使用spring的时候需要注意他的很多特性都是给予代理实现的,如果在使用的时候不是使用spring管理的bean或者绕过了spring这层那么他的特性设置是无效的.常见的场景有事务管理,依赖注入等.
cglib提供代理:
1 | package com.xh.model; |
以上.