Java设计模式 ->代理模式

简介: Java设计模式 ->代理模式

代理模式: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代理。

相关文章
|
3天前
|
设计模式 算法 搜索推荐
Java设计模式之策略模式详解
Java设计模式之策略模式详解
|
3天前
|
设计模式 Java 机器人
Java设计模式之状态模式详解
Java设计模式之状态模式详解
|
2天前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
16 4
|
2天前
|
设计模式 缓存 Java
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
|
2天前
|
设计模式 监控 安全
设计模式之代理模式(Java)
设计模式之代理模式(Java)
|
2天前
|
设计模式 Java 中间件
深入探索Java设计模式:责任链模式解析与实践
深入探索Java设计模式:责任链模式解析与实践
5 0
|
2天前
|
设计模式 Java 开发者
Java中的设计模式深度解析
Java中的设计模式深度解析
|
2天前
|
设计模式 Java 数据库
Java设计模式:桥接模式实现灵活组合,超越单一继承的设计之道(十)
Java设计模式:桥接模式实现灵活组合,超越单一继承的设计之道(十)
|
2天前
|
设计模式 Java
Java设计模式:外观模式之优雅门面(九)
Java设计模式:外观模式之优雅门面(九)
|
2天前
|
设计模式 安全 Java
Java设计模式:代理模式的静态和动态之分(八)
Java设计模式:代理模式的静态和动态之分(八)