java动态代理简单例子

动态代理
placeholder image
admin 发布于:2011-11-27 19:06:00
阅读:loading

代理模式主要有两种:静态代理和动态代理,可以看看这篇文章:

http://kuangbaoxu.iteye.com/blog/192804

这里说说动态代理的简单例子,spring的AOE底层就是代理,Struts的拦截器本质上也是代理,不多说了,自己上例子,我们做一个吃饭的动作,那么吃饭前和吃饭后各做一件事情,来模拟一下方法的拦截或者说是监听。

image.png


image.png


image.png


 示例核心:通过接口代理为接口动态去增加方法实现,以及方法调用的前置与后置处理。


说明:在第二部中第14行的 Object proxy参数似乎没有什么用处,方法中也好像用不到,注意:如果在函数实现中比如在16行加上System.out.println(proxy);

如果加上这么一句打印输出的话,程序会抛异常,异常原因为:无限的递归循环,诡异吧。

=======2013-04-22 分割线======================================
上面说的疑问:添加Syso之后出现死循环,还是太年轻了,.当我们在调用代理对象的invoke函数时,Syso(proxy)其实是调用该代理对象的.toString()函数,相当于proxy.invode()中存在proxy.toString()的调用,proxy.toString()又会触发proxy.invode,导致了死循环。

例子实现意义:在调用吃饭方法的时候,同时在调用之前添加一个before()的函数,在调用之后添加一个after()的函数,这个能有什么用处就看是怎么来显神通了。

 点赞


 发表评论

当前回复:作者

 评论列表


留言区