Java 动态代理

代理模式:创建代理对象,使用代理对象控制目标对象的访问。

这里写图片描述

Subject : 抽象主题角色,定义方法,可以是抽象类也可以是接口。
RealSubject : 具体主题角色,它是业务逻辑的具体实现者。
ProxySybject : 代理主题角色,它代理具体主题角色,并将其中的方法暴露给客户,由其调用。

这样子导致了代理类所实现的接口和静态方法都被固定,每次增加具体主题角色,就要增加代理主题角色类,造成系统中的类的数量急剧增加,这称为静态代理。

动态代理:
在系统运行的时候动态地创建代理类,并且一个代理类可以代理多个具体主题角色。动态代理类需要实现一个接口:InvocationHandler.调用具体主题中的方法时,会转由这个接口中的invoke方法进行调用。

invoke(Object proxy,Method method,Object[] args)

proxy : 在其上调用方法的代理实例。
method : 对应于在代理实例上调用的接口的Method实例。
args : 包含传入代理实例上方法调用的参数值的对象数组。
return : 如果接口方法的声明类型是基本类型,则方法返回的值一定是基本包装类的实例。

Proxy类:提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h);

loader : 定义代理类的类加载器
interfaces : 代理类要实现的接口列表h

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

输出结果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值