Java设计模式(代理模式整理中ing)

一、代理模式

1、代理模式定义:

**代理模式:**由于某些原因要给某对象提供一个代理以控制对该对象的访问,这时访问对象不适合或者不能够直接引用目标对象,代理对象作为访问对象与目标对象之间的中介进行连接调控调用。

2、代理模式的三种角色:

2.1 抽象主题

2.2 真实主题类

2.3 代理(Proxy)类

3、代理模式的分类

3.1、静态代理模式

代理对象和目标实现同一个接口

优点:可以在不修改目标对象的前提下扩展目标对象的功能

缺点:1、冗余 由于代理对象和目标对象实现了同一个接口,会产生很多的代理类

2、不易维护 一旦接口增加方法,目标对象和代理对象都需要进行修改

3.2、动态代理模式

3.2.1、用jdk的api

动态代理是动态的在内存中构建代理对象,从而实现对目标对象的代理能力

所以动态代理成为jdk代理或者叫接口代理

3.2.2 cglib动态代理

添加了jar包

第三方代码的生成类库,运行时内存中动态生成一个子对象从而实现对目标对象功能的扩展.

3.3、静态代理和动态代理的区别:

动态代理对象不用实现接口但是要求目标对象必须实现接口,否则不能使用动态代理

1.静态代理在编译时就已经实现了编译完成后代理类是一个class文件
2.动态代理在运行时候动态生成,编译完成后没有class文件,从而实现动态的生成字节码并加载到JVM中

3.4、cglib与动态代理最大的区别就是:

1.使用动态代理的对象必须实现一个或者多个接口

2.使用cglib代理的兑现则无需实现接口,达到代理类无入侵

3.使用cglib需要引入cglib的jar包,如果已经有了spring-core的jar包,则无需引入,因为Spring中包含了cglib

4.总结

1.静态代理实现较简单,只要代理对象对目标对象进行包装,即可实现增强功能,但静态代理只能为一个目标对象服务,如果目标对象过多,则会产生很多代理类。
2.JDK动态代理需要目标对象实现业务接口,代理类只需实现InvocationHandler接口。
3.动态代理生成的类为 class com.sun.proxy.Proxy0,cglib代理生成的类为class cn.test.baocuonisini.UserDaoEnhancerByCGLIB$b5ec9bbd。
4.静态代理在编译时产生class字节码文件,可以直接使用,效率高。
5.动态代理必须实现InvocationHandler接口,通过反射代理方法,比较消耗系统性能,但可以减少代理类的数量,使用更灵活。
6.cglib代理无需实现接口,通过生成类字节码实现代理,比反射稍快,不存在性能问题,但cglib会继承目标对象,需要重写方法,所以目标对象不能为final类。

相关推荐
阿珊和她的猫2 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234175 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~5 小时前
C#---StopWatch类
开发语言·c#
桦说编程7 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen7 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研7 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
快乐的划水a7 小时前
组合模式及优化
c++·设计模式·组合模式
没有bug.的程序员8 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋8 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cui__OaO8 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习