客服QQ188662808
开启辅助访问
切换到宽版
登录
立即注册
首页
Portal
社区
BBS
搜索
搜索
每日签到
话题
微商资讯
电商营销
电商交流
电商开店
网购技巧
创业项目
交流
淘宝交流
抖音交流
拼多多区
京东交流
快手交流
唯品会区
生活
男女服装
时尚童装
运动鞋子
美容护理
大牌包包
奢侈饰品
分类
保健用品
母婴玩具
数码礼品
家装电器
日用百货
医药用品
本版
文章
帖子
用户
微商货源网-微商论坛
»
社区
›
微商交流
›
电商开店
›
Java三种署理 模式详解:静态署理 、动态署理 和CGLIB署 ...
返回列表
发新帖
Java三种署理 模式详解:静态署理 、动态署理 和CGLIB署理
[复制链接]
319
|
0
|
2023-12-6 01:19:03
|
显示全部楼层
|
阅读模式
Java三种署理 模式:静态署理 、动态署理 和CGLIB署理
署理 模式
署理 模式是23种设计模式中的一种。署理 模式是一种结构型设计模式,它允许为其他对象提供一个替代品或占位符,以控制对这个对象的拜访 。署理 模式可以在不修改被署理 对象的基础上,通过扩展署理 类,进行一些功能 的附加与增强。
署理 模式的组成
适配器模式一般包含 三种角色:
抽象主题角色(Subject)
:通过接口或抽象类声明真实角色实现的业务办法 。
署理 主题角色(Proxy)
:实现抽象角色,是真实角色的署理 (拜访 层),通过真实角色的业务逻辑办法 来实现抽象办法 ,并可以附加自己的操作。
真实主题角色(RealSubject)
:实现抽象角色,界说 真实角色所要实现的业务逻辑,供署理 角色挪用 。
署理 模式主要有三种形式,分别 是静态署理 、动态署理 (也称JDK署理 、接口署理 )和CGLIB署理 (在内存动态创建 对象而不需要实现接口,也可属于动态署理 得领域 )
静态署理
静态署理 是界说 父类或者接口,然后被署理 对象(即目标对象)与署理 对象一起实现相同的接口或者是继承相同父类。署理 对象与目标对象实现相同的接口,然后通过挪用 相同的办法 来挪用 目标对象的办法 。
优点:可不修改目标对象的功能 ,通过署理 对象对目标功能 扩展。
缺点:因为署理 对象需要与目标对象实现一样的接口,所以会有很多署理 类,一旦接口 增加办法 ,目标对象与署理 对象都要维护。
动态署理
动态署理 是在运行时动态生成署理 类,不需要手动编写署理 类。Java种的动态署理 主要是使用java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler接口实现。
优点:灵活性高、减少重复代码、统一处理 逻辑、可以署理 多个真实类。
缺点:基于反射机制,性能较低,且无法署理 final类和办法 。
动态署理 最主要的就是Proxy.newProxyInstance办法 ,它是用于创建 动态署理 对象的静态办法 。它接受三个参数:
ClassLoader:用于加载动态署理 类的类加载器。
interfaces:要署理 的接口数组。
InvocationHandler:实现了InvocationHandler接口的对象,用于处理 署理 对象的办法 挪用 。
JDK 动态署理 有一个最致命的问题是其只能署理 实现了接口的类。
为了解决这个问题,我们可以用 CGLIB 动态署理 机制来避免。
CGLIB署理
CGLIB署理 也叫作子类署理 ,它使目标对象不需要实现接口,是在内存中构建一个子类对象从而实现对目标对象功能 扩展,有的也将CGLIB署理 归属到动态署理 。
CGLIB是一个高性能的代码生成包,它可以在运行期扩展java类与实现java接口。被许多AOP的框架使用(如Spring AOP)。Cglib包的底层是通过使用字节码处理 框架ASM来转换字节码并生成新的类。
优点:可以为没有实现接口的类提供署理 ;性能比动态署理 更高
缺点:生成的署理 类较年夜 、不支持final办法 和类、对于final类和办法 的处理 相对庞杂 。
CGLIB与java动态署理 的区别
1.实现方法 :
Java动态署理 :使用java.lang.reflect.Proxy和InvocationHandler接口。Java动态署理 只能为接口创建 署理 对象,它是基于接口的署理 。通过Proxy.newProxyInstance()办法 可以动态地生成实现了指定接口的署理 类。
CGLIB:通过继承目标类的方法 创建 署理 对象。CGLIB可以为类创建 署理 ,而不仅仅是接口。它通过生成目标类的子类,在子类中增加署理 逻辑来实现动态署理 。
2.署理 对象类型:
Java动态署理 :只能署理 实现了接口的类。它要求目标对象实现一个或多个接口,然后通过署理 对象来实现这些接口。
CGLIB:可以署理 没有实现任何接口的类。它通过继承目标类来创建 署理 对象,因此目标类不需要实现任何接口。
3.性能:
Java动态署理 :由于生成的署理 对象是基于接口的,因此在挪用 署理 办法 时,会通过接口的办法 挪用 InvocationHandler的invoke办法 ,再由invoke办法 挪用 实际的目标办法 。这一层额外的挪用 可能会引入一些性能开销。
CGLIB:生成的署理 对象是目标类的子类,因此挪用 署理 办法 时,直接挪用 子类中的办法 ,避免了通过接口的中间层,可能会在一些情况下具有更好的性能。
4.结构 方法 :
Java动态署理 :通过Proxy.newProxyInstance()办法 动态生成署理 对象,需要提供一个实现InvocationHandler接口的对象。
CGLIB:通过CGLIB库动态生成署理 对象,无需提供InvocationHandler。CGLIB通过继承目标类并重写其中的办法 来实现署理 逻辑。
应用场景
署理 模式可以在多种场景下使用,包含 但不限于以下几个方面:
1.拜访 控制
:署理 模式可以用来控制对实际对象的拜访 权限。比如 ,只有特定用户或角色能力 拜访 某些敏感数据。
2.远程拜访
:署理 模式可以用来处理 远程对象的拜访 。比如 ,通过署理 对象来拜访 远程Web办事 。
3.延迟加载
:署理 模式可以用来实现延迟加载。比如 ,通过署理 对象来加载某些资源或数据,以避免在法度模范 启动时就加载所有数据。
4.虚拟署理
:当需要延迟加载或预加载年夜 量数据时,可以使用虚拟署理 来提高法度模范 的性能和效率。
5.缓存署理
:当需要对经常使用的数据进行缓存时,可以使用缓存署理 来治理 和优化数据的拜访 效率。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
雨荷424
17
主题
46
回帖
153
积分
注册会员
注册会员, 积分 153, 距离下一级还需 47 积分
注册会员, 积分 153, 距离下一级还需 47 积分
积分
153
加好友
发消息
回复楼主
返回列表
微商资讯
电商营销
电商交流
电商开店
网购技巧
创业项目
推广技术
广告发布
淘宝交流
京东交流
抖音交流
快手交流
拼多多区
唯品会区
图文推荐
淄博:虽未进行区划调剂 ,但张店区已被“拆”成3部分 成长
2022-10-26
韩国男子直播中性侵熟睡女子,获刑7年
2023-01-13
干货!冻品人必知的全国53个知名冻品批发市场!建议收藏
2022-12-02
又一药物被抢购?医生呼吁:请留给真正需要的人
2023-01-05
曝光!肥城市人民法院颁布 2022年第一批失信被执行人名单
2022-11-25
热门排行
1
又一药物被抢购?医生呼吁:请留给真正需要的人
2
iPhone又更新,微信推送延迟有救?
3
荷兰上百所学校向儿童推广吃昆虫取代 吃肉,议员不满:这是把孩子当小白鼠
4
财联社时评:实现支付宝向微信转账,需要网联进一步发力
5
西安部分 小区二手房指导价出台:高新枫林绿洲23755元/㎡居首位
6
真正时髦的女人,穿衣都不会千篇一律,24套穿衣模样太美了
7
意媒:罗马与奥亚尔杀青 加盟协议,测验考试 在冬窗提前半年签下他
8
80年代十年夜 经典武打片,南拳王不幸离世,李连杰在世界成名的前夜
9
今日立秋丨多喝温水避秋燥 健脾和胃慎贴膘
10
网购53把“老凤祥”银梳子竟都是假的?商家被判退一赔十