您的位置:首页 > 编程语言 > Java开发

Java 动态代理

2017-07-13 10:37 190 查看
代理模式:创建代理对象,使用代理对象控制目标对象的访问。



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









输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: