【教程】java代理模式

3160601781   ·   发表于 2020-8-17   ·   编程代码
代理设计模式
代理模式简介
实现代理模式的要求
静态代理的实现步骤
1、创建接口,出售商品
2、创建商家,商家实现了出售商品的接口【就是目标类】
3、创建代理类,完成对目标类功能的加强
4、测试
动态代理实现步骤
1、定义接口
2、定义目标类,也就是接口实现类
3、使用JDK动态代理完成代理类的功能增强
4、使用反射机制完成动态代理类创建
5、JDK动态代理完成代理类创建分析
扩展
动态代理源码分析
#SSM完成学生管理系统【先导篇】#
[呵呵][呵呵]开始开始!!!
静态代理,动态代理,不光只有java中有,他是一个思想,是一种设计模式。上面是目录!将通过以上方面讲解个人理解的java代理模式

9 Reply   |  Until 2020-8-21 | 4711 View

1094525
发表于 2020-8-17

代理模式简介
1、代理模式(Proxy Pattern),是程序设计中的一种设计模式。

2、所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口: 网上连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。【百度词条】

3、为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,
这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请
求分派给委托类处理、以及委托类执行完请求后的后续处理。 【百度】

4、我的个人理解:所谓代理模式,就是指一个对象可以完成另一个对象的功能,但是这个对象可以在完成功能的过程中有其他的想法。
比如:淘宝商家就是商品厂家的代理,厂家就是生产商品并且出售的,淘宝商家就是他的一个代理,可以将商品卖出,并且按照自己的(价格)出售
【个人简单理解】

评论列表

  • 加载数据中...

编写评论内容

darkc
发表于 2020-8-17

实现代理模式的要求
1、代理类需要和目标类实现相同的接口。

2、代理类中需要有目标类,不然怎么实现目标的功能,并且进行加强呢

3、增强功能:在原有的功能之上进行功能的增强

4、访问控制:代理类不让你直接访问目标类,例如:商家不让你直接访问厂家

评论列表

  • 加载数据中...

编写评论内容

menglicl
发表于 2020-8-17

静态代理的实现步骤
1、创建接口,出售商品
2、创建商家,商家实现了出售商品的接口【就是目标类】

评论列表

  • 加载数据中...

编写评论内容

北斗星的爱
发表于 2020-8-17

3、创建代理类,完成对目标类功能的加强
4、测试
结果查看:
在不修改原来厂家目标类的情况下,代理类实现了销售商品。并且增强了功能。1.增加了商品单价。2.增加了反馈优惠券。

评论列表

  • 加载数据中...

编写评论内容

马上来支持我
发表于 2020-8-17

动态代理实现步骤
1、定义接口
2、定义目标类,也就是接口实现类
3、使用JDK动态代理完成代理类的功能增强
关于第三步解释:这个类是InvocationHandler接口的实现了,所以的动态代理都需要有这个实现类,这个实现类的目的就是增强功能。在这个类中完成目标类的执行,功能的增强,访问的控制。

评论列表

  • 加载数据中...

编写评论内容

浅殇酱
发表于 2020-8-17

4、使用反射机制完成动态代理类创建
结果:
动态代理的代理类是JVM生成的通过java.lang.reflect.Proxy类。需要类加载器,实现的接口,以及调用处理器handler。

评论列表

  • 加载数据中...

编写评论内容

13824879591
发表于 2020-8-17

JDK动态代理完成代理类创建分析
1、JDK动态代理使用的是反射机制创建代理对象

2、使用InvocationHandler接口完成代理类功能的增强

3、管理InvocationHandler实现类的方法分析
public Object invoke(Object proxy, Method method, Object[] args)
proxy:代理对象
method:代理对象访问的方法
args:传递参数
通过invoke()方法完成目标方法的调用

评论列表

  • 加载数据中...

编写评论内容

221121
发表于 2020-8-17

动态代理源码分析
1、相关包:

java.lang.reflect.Proxy
java.lang.reflect.InvocationHandler
2、Proxy中的重要静态方法

static InvocationHandler getInvocationHandler(Object proxy)
根据当前代理对象,获取调用处理器对象。

static class getProxyClass(ClassLoader loader, class… interfaces)
该方法用于获取关联于指定类装载器和一组接口的动态代理类的类对象

static boolean isProxyClass(class cl)
该方法用于判断指定类对象是否是一个动态代理类

【重点】static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
该方法用于为指定类装载器、一组接口及调用处理器生成动态代理类实例

评论列表

  • 加载数据中...

编写评论内容

baiyichu
发表于 2020-8-18

动态代理太难了,没学会

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content