CGLIB 实现代理设计模式|学习笔记

简介: 快速学习 CGLIB 实现代理设计模式

开发者学堂课程【Java 高级编程CGLIB 实现代理设计模式】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/395


CGLIB 实现代理设计模式


内容简介:


. Proxy 类创建代理对象

.CGLIB 实现代理设计模式

 

 

一. Proxy 类创建代理对象

从 Java 的官方来讲已经明确的要求了如果要想实现代理设计模式,那么一定是基于接口的应用,所以在官方给出的 Proxy 类创建代理对象时都需要传递该对象所有的接口信息:

 

Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);

 

但是这个时候有一部分的开发者就认为不应该强迫性的基于接口来实现代理设计。

 

比如数据库,官方给出的标准做法是 SQL 语 句,有人认为 SQL 语句不好就不用SQL;如果操作程序开发,现在核心的结构是面向对象,有人认为面向对象不好,因为函数是编程。所以一些开发者就开发出了一个 CGLIB 的开发包,利用这个开发包就可以实现基于类的代理设计模式。

 

 

二.CGLIB 实现代理设计模式

1)CGLIB 是一个第三方的程序包,需要单独在 Eclipse 之中进行配置,现在假设程序包的路径为:

D:\jar-lib\cglib-nodep-3.2.6.jar,那么需要打开 Eclipse 项目属性安装第三方开发包;

 

比如找到程序,找到 properties,再跟上 Java Build Path,选择 Libraries 下的Classpath,选择 Add External JARs 增加一个扩展包,如下图:

图片26.png

然后找到计算机我的电脑的 D 盘,再跟上一个开发包,现在就表示已经可以将第三方的程序包直接拿过来使用了;图片27.png

这个操作以后会经常见到,因为以后会大量的使用第三方开发包。

 

2)编写程序类,该类不实现任何接口;图片28.png

比如现在要做是没有接口的代理设计,所以在这里面找到 message 类, message类在这里就是一个普通的类。Message 没有接口,如果没有接口,操作形式是不可能变为代理设计的,但是 CGLIB 就不要求用接口来实现;

 

 

3)利用 CGLIB 编代理类,但是这个代理类需要做一个明确,此时相当于使用了类的形式实现了代理设计的处理,所以该代理设计需要通过 CGLIB 来生成代理对象;

定义一个代理类:图片29.png

图片30.png

从整体来讲,这个代理的结构跟之前做的操作形式非常相似,唯一的区别是这个代码中没有 proxy。

 

4)此时如果要想创建代理类对象,则就必须进行一系列的 CGLIB 处理;

不管怎么操作代理操作,它一定要有一个公共的复位,实际上它是通过类的继承来模拟代理过程的,程序代码如下:图片31.png

执行结果如下:

【消息代理】 进行消息发送通道的链接。

【发送消息】www.mldn.cn

【消息代理】关闭消息通道。

 

在进行代理设计模式定义的时候除了可以使用接口之外,也可以不受接口的限制而实现基于类的代理设计,但是如果从正常的设计角度来讲,强烈建议还是基于接口的设计会比较合理。

 

CGLIB 只是传统代理设计上的一种功能的补充。

我们要清楚代理设计模式的基本结构,掌握动态代理,知道 CGLIB 不再强制性与接口绑定从而实现基于类的代理设计模式。

相关文章
|
7月前
|
设计模式 XML JSON
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
167 0
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
89 0
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
56 0
|
2月前
|
设计模式 网络协议 Java
05.静态代理设计模式
《静态代理设计模式》详细介绍了静态代理的基本概念、原理与实现、应用场景及优缺点。主要内容包括静态代理的由来、定义、使用场景、实现方式、结构图与时序图,以及其在降低耦合、保护对象权限等方面的优势。同时,文章也指出了静态代理的局限性,如缺乏灵活性、难以复用、难以动态添加功能等,并介绍了动态代理如何弥补这些不足。最后,通过多个实际案例和代码示例,帮助读者更好地理解和应用静态代理模式。
47 4
|
2月前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
33 2
|
3月前
|
设计模式 Java Spring
spring源码设计模式分析-代理设计模式(二)
spring源码设计模式分析-代理设计模式(二)
|
2月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
47 0
|
2月前
|
设计模式 Java Kotlin
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
32 0
|
5月前
|
设计模式 Java
Head First设计模式学习笔记
Head First设计模式学习笔记
|
7月前
|
设计模式 缓存 安全
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
100 1

热门文章

最新文章