0
点赞
收藏
分享

微信扫一扫

Java设计模式 ->代理模式

小禹说财 2022-01-26 阅读 91


代理模式:Proxy Pattern、结构型设计模式


    代理模式是为其他对象提供一种代理,以控制对这个对象的访问。
    代理模式核心在于 在客户端和目标对象之间起到中介的作用


代理模式应用场景


1、生活中的 房产 中介 快递 等
2、事物、切面日志、分库分表多个数据源 等


JDK动态代理


​1、实现 InvocationHandler 接口 ​

​2、通过 字节码重组 ,重新生成对象来替代原生对象 ​

​3、获取代理对象引用,并反射获取所有接口 ​

​4、JDK动态代理生成一个新类,新的类实现被代理类所有接口 ​

​5、生成java代码,编译 .class 文件,加载到JVM中 ​

​ps:在ClassPath下只要以$开头的 .class 文件,一般都是自动生成的。​


CgLib动态代理


​1、实现 MethodInterceptor 接口的 intercept 方法 ​

​2、代理的目标对象不需要实现任何接口,通过动态继承目标对象实现动态代理 ​

​3、代理效率比JDK代理高,采用 FastClass 机制 ​

​4、FastClass:代理类和被代理类各生成一个对象,分配一个index,这个index作为入参直接进行调用,省去反射

​5、生成java代码,编译 .class 文件,加载到JVM中​


代理模式的优缺点


优点:

​1、代理模式能将代理对象与真实调用目标对象进行分离 ​

​2、在一定程度上降低了系统的耦合性,增加系统扩展性 ​

​3、起到保护目标对象、增强目标对象的作用 ​

缺点:

​1、增加系统复杂度,增加类的数量 ​

​2、在客户端和目标对象中增加一个代理对象,可能会导致请求速度变​


Spring代理模式源码应用


1、JdkDynamicAopProxy CglibAopProxy
2、当 Bean 有实现接口时,Spring会用JDK动态代理。
3、当 Bean 没有实现接口时,Spring会选CgLib代理。
4、在Spring中可以通过配置文件配置使用CgLib代理。



举报

相关推荐

0 条评论