首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JDK反照之JDK动态proxy

2012-10-31 
JDK反射之JDK动态proxy?? 图1:代理模式类结构图 ?????图2:代理模式序列图 ?2.JDK 动态代理 所谓 JDK 动态

JDK反射之JDK动态proxy

?

?

图1:代理模式类结构图

?

?
JDK反照之JDK动态proxy
?

?

?

图2:代理模式序列图

?

2.JDK 动态代理


所谓 JDK 动态代理就是在运行时动态生成红色的代理类的过程。和静态代理不一样的地方是静态代理在编译期就要完成代理类 的实现。那么动态代理是如何实现的呢?

根据下面的例子,一步一步来看。

假设有这样一个接口 Speak:

?

?JDK反照之JDK动态proxy?JDK反照之JDK动态proxy
?

?

?

?

图3:JDK动态代理调用过程

?

可以从上图看出来, JDK 动态反射并不是那么简单的一层代理,而是通过层层代理,最终通过 Method 的反射来调用目标对象的方法,而 aop 的实现可以放在 InvocationHandler 的是实现类里。

那么根据上述关于动态代理的简介,要实现 PersonSpeak 的 aop ,需要做两件事情

1.?????? 实现一个持有 Speak 对象的 InvocationHandler 子类,改子类通过 Mechod 反射调用 PersonSpeak 的方法,并在调用方法前后实现 aop 功能。

2.?????? 实现一个能动态创建 Speak 子类的代理类工厂,改工厂能动态的创建 Speak 子类。

?

具体实现如下:

1.??????? SpeakInvocationHandler ( 实现 InvocationHandler 接口 )

可以看出该类的 invoke 方法实现 aop 的关键,所有方法都是通过 invoke 来调用, invoke 内部通过反射来调用目标对象 target ,同时在调用前后实现了 aop 。

?JDK反照之JDK动态proxy

?
?

2.??????? ProxyFactory

?

?JDK反照之JDK动态proxy?JDK反照之JDK动态proxy
?

图4:Hessian远程服务调用过程

总结
JDK 动态代理是 java 反射的一个非常重要的特性, JDK 动态代理类还可以用来作为 SOAP 的远程服务代理类,总之它在某种程度上提供了 java 的动态性的特点,为应用提供了很大的灵活性。

1 楼 WhyNever 2012-07-20   学习了。谢谢分享~

热点排行