轻松理解Java动态代理
2018-02-27 23:50
381 查看
动态代理是Java一种特殊的代理机制: 代理类动态生成,其优点是动态性,有两方面体现:
1) 代码动态生成, 因此可以少写很多代码,从这个角度,我们可以称动态代理是一种元编程
2) 工作类的具体类型是动态指定的, 增加了灵活性.
首先我们看一般代理的UML类图如下:
在(静态)代理中, 程序员实现的(静态定义)ProxyClass必须要(静态的,显式的)引用WorkClass
在Java动态代理中, Proxy对象由Proxy类的方法 static Object newProxyInstance(
ClassLoader loader,
Class<?>[] interfaces, // Proxy对象可以实现多个接口
InvocationHandler handler) // InvocationHandler持有WorkClass生成,这个代理对象实现了参数给定的(可能多个)interfaces接口,当在这个代理对象上调用接口定义的方法时,将转换为调用InvocationHandler的invoke方法,方法由Method对象参数指定,调用方法的实参通过Object[]封装.程序员实现了InvocationHandler对象,在这个对象中需要引用一个WorkClass对象.在invoke方法中自定义做一些想要的操作,再将实际调用转到WorkClass对象上.这就是整个动态代理的实现过程.如下图所示:
通过对动态代理的类图和调用过程分析, 可以确定这是一种策略设计模式的实现.
ProxyClass类的实现变得简单: 所有接口定义方法的实现都是将调用外包给InvocationHandler,因此在newProxyInstance指定的接口将决定编译器如何生成这个类,由于ClassLoader具有类名字空间的属性,因此二元组(接口,ClassLoader)确定了一个ProxyClass类.
1) 代码动态生成, 因此可以少写很多代码,从这个角度,我们可以称动态代理是一种元编程
2) 工作类的具体类型是动态指定的, 增加了灵活性.
首先我们看一般代理的UML类图如下:
在(静态)代理中, 程序员实现的(静态定义)ProxyClass必须要(静态的,显式的)引用WorkClass
在Java动态代理中, Proxy对象由Proxy类的方法 static Object newProxyInstance(
ClassLoader loader,
Class<?>[] interfaces, // Proxy对象可以实现多个接口
InvocationHandler handler) // InvocationHandler持有WorkClass生成,这个代理对象实现了参数给定的(可能多个)interfaces接口,当在这个代理对象上调用接口定义的方法时,将转换为调用InvocationHandler的invoke方法,方法由Method对象参数指定,调用方法的实参通过Object[]封装.程序员实现了InvocationHandler对象,在这个对象中需要引用一个WorkClass对象.在invoke方法中自定义做一些想要的操作,再将实际调用转到WorkClass对象上.这就是整个动态代理的实现过程.如下图所示:
通过对动态代理的类图和调用过程分析, 可以确定这是一种策略设计模式的实现.
ProxyClass类的实现变得简单: 所有接口定义方法的实现都是将调用外包给InvocationHandler,因此在newProxyInstance指定的接口将决定编译器如何生成这个类,由于ClassLoader具有类名字空间的属性,因此二元组(接口,ClassLoader)确定了一个ProxyClass类.
相关文章推荐
- 轻松理解Java动态代理
- 轻松理解Java动态代理
- 轻松实现java动态代理
- 理解JAVA动态代理 4000
- java动态代理的学习和理解
- Java Reflection深入理解动态代理(Proxy)
- JAVA动态代理模式(从现实生活角度理解代码原理)
- 彻底理解JAVA动态代理
- Java动态代理的自己理解
- 浅谈模拟java动态代理(自己的理解,里面代码是马士兵老师的代码)
- 十分钟让你理解java中的动态代理
- 彻底理解JAVA动态代理
- Java动态代理的理解
- java反射和动态代理的理解
- java动态代理的的理解
- java 动态代理 自我理解
- Spring AOP之 java 动态代理(Proxy 与 InvocationHandler)理解
- 彻底理解JAVA动态代理
- 对于java动态代理模式的深入理解