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

java 动态代理

2016-06-17 01:38 423 查看
http://blog.csdn.net/mhmyqn/article/details/48474815#comments

http://blog.csdn.net/luanlouis/article/details/24589193#comments

动态代理工作的基本模式就是将自己的方法功能的实现交给 InvocationHandler角色,外界对Proxy角色中的每一个方法的调用,Proxy角色都会交给InvocationHandler来处理,而InvocationHandler则调用具体对象角色的方法。如下图所示:

在面向对象的编程之中,如果我们想要约定Proxy 和RealSubject可以实现相同的功能,有两种方式:

a.一个比较直观的方式,就是定义一个功能接口,然后让Proxy 和RealSubject来实现这个接口。

b.还有比较隐晦的方式,就是通过继承。因为如果Proxy 继承自RealSubject,这样Proxy则拥有了RealSubject的功能,Proxy还可以通过重写RealSubject中的方法,来实现多态。

在这种模式之中:代理Proxy 和RealSubject 应该实现相同的功能,这一点相当重要。(我这里说的功能,可以理解为某个类的public方法)

JDK 动态代理是在程序运行过程中,根据被代理的接口来动态生成代理类的class文件。相关的两个类:

interface InvocationHandler

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

Class Proxy

JDK 提供 java.lang.reflect.Proxy类来实现动态代理,通过
Object newProxyInstance(ClassLoader loader,Class<?>interface,InvocationHandler h)
生成代理对象,它会与代理对象关联,当请求分发到代理对象后,会自动执行h.invoke() 方法;

对于代理的接口的实际处理是 java.lang.reflect.InvocationHandler,他提供了一个 invoke方法供是实现者提供相应的代理逻辑的实现。

所有的方法功能的实现都统一调用了InvocationHandler的invoke()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: