JAVAEE 代理类对象以及动态代理编程思想

代理类

1.什么是代理类?

简单来说,就是当旧程序功能需要改版完善,我们的做法不是去修改源代码,而是写一个代理类去帮助我们完成任务。同时也不必去修改其他层架构的代码,就可以完成改版。
如果你坚持要修改源代码,那你一定会牵一发而动全身,如果这个类是底层类,那你跟再做一个项目没什么区别。

2.代理类的思想

通俗来讲,代理类就是在你原先的程序上添砖加瓦。在这有三种添砖加瓦的方式:静态代理类、装饰类代理、动态代理。

1.静态代理类

静态代理类是最直接的方法,具体方法就是在新的功能类中ProxyClass通过实现你原先的功能接口,保证不加强的功能依旧能使用。随后在该类中通过方法中创建原先的 oldClass对象,同时对复用的方法下重新编写要实现的功能。如下所示:
在这里插入图片描述

2.装饰类代理

装饰类代理在本质上与静态代理并没有什么本质上的区别,唯一的区别在于装饰类属于静态代理类的安全版本。也就是需要你自己传入一个要加强的对象,而并非手动创建,这样可以保护你原有的功能类代码不被侵入。

3.动态代理

动态代理需要用到java.long.reflect.Proxy类中的newProxyInstance方法。

public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)

该方法利用接口回调的思想,需要传入一个需要加强的功能类(ClassLoader loade),随后需要获得该方法实现的所有接口(Class<?>[] interfaces),
最后(InvocationHandler h)(public Object invoke(Object proxy, Method method, Object[] args))是一个功能性接口,前两个形参为最后一个方法作铺垫,其中method为前面输入类型中所有的方法,而args为方法中需要输入的参数。
代码类型如下:
在这里插入图片描述
其中invoke方法使用了内部类的写法实现重写方法,可以先判断是否为你要增强的方法,随后在其中实现增强,随后该方法需要一个返回值,返回的是一个新的功能类也就是你之前要加强的功能类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值