A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© TK13761 中级黑马   /  2013-3-23 16:08  /  2164 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谭仁龙 于 2013-3-25 13:54 编辑

动态代理原理是怎么回事儿,一般都什么时候用。求指点

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢  发表于 2013-3-25 12:05

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

正序浏览
补充一点:.当请求代理类的方法时,这个请求会被转到执行与代理类关联InvocationHandler 的invoke方法。那InvocationHandler到底是什么?对它的理解可以是这样: 它用来处理方法的调用,实现类也有同样的意义;与代理类对象相关联则表示, 它就是负责处理代理类应该有的动作,把所有的方法请求分发到invoke这个方法上。

点评

谢谢  发表于 2013-3-25 13:53

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
动态代理的工作原理:1)Client(客户端)调用代理,代理的构造方法接受一个InvocationHandler,client调用代理的各个方法,代理的各个方法请求转发给刚才通过构造方法传入的handler对象,又把各请求分发给目标的相应的方法。就是将handler封装起来,其中this引用了当前的放(发来什么请求就接受哪个方法)。
示意图:



2)将创建代理的过程改为一种更优雅的方式,eclipse重构出一个getProxy方法绑定接受目标,同时返回代理对象,让调用者更懒惰,更方便,调用者甚至不用接触任何代理的API。
3、把系统功能代理模块化,即切面代码也改为通过参数形式提供,怎么把要执行的系统功能代码以参数的形式提供:
1)把要执行的代码装到一个对象的某个方法中,然后把此对象作为参数传递,接收者只要调用这个对象的方法,即等于执行了外接提供的代码。
2)为bind方法增加一个Advice参数。

点评

谢昆哥指点  发表于 2013-3-25 13:53

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马