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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张振纲 中级黑马   /  2012-8-29 10:33  /  1360 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先代理的原理是当调用者要调用目标类时,没有进行直接调用
而是将命令传递给代理类
代理类实现某些借口后再去调用目标类

可是我有几个疑惑

1.为什么目标类和代理类都需要实现相同接口
2.动态代理中的InvocationHandlier究竟代表什么是代理类还是什么?作用是什么

2 个回复

倒序浏览
1、
实现相同接口,这是面向接口编程,提高代码的可扩展性、降代码的低耦合性,便于代理测试,不需要修改主程序代码,只需要修改config.properties文件。
例如,视频中的例子,
  1. InputStream ips = AopFrameworkTest.class.getResourceAsStream("config.properties");
  2.                 Object bean = new BeanFactory(ips).getBean("xxx");
复制代码
我要用代理,则注释掉#xxx=java.util.ArrayList,不用代理时,启用xxx=java.util.ArrayList,而注释掉#xxx=com.itheima.zhangxiaoxiang.aopframework.ProxyFactoryBean
  1. xxx=java.util.ArrayList
  2. #xxx=com.itheima.zhangxiaoxiang.aopframework.ProxyFactoryBean
  3. xxx.advice=com.itheima.zhangxiaoxiang.MyAdvice
  4. xxx.target=java.util.ArrayList
复制代码
2、代理中的InvocationHandler是接口,构造代理类时第三个参数对象类实现此接口中的invoke方法,此方法invoke中传入目标类的对象,从而实现代理功能


代理类确实比较难,我昨晚看了两边,边看边敲代码才理解一下。你也得自己照着视频,便暂停边敲代码,一句话、一行代码去思考,才能更好的理解。
回复 使用道具 举报
寇龙飞 发表于 2012-8-29 10:59
1、
实现相同接口,这是面向接口编程,提高代码的可扩展性、降代码的低耦合性,便于代理测试,不需要修改主 ...

感谢二楼
代理彻底晕菜,准备去试试你的建议
边看边敲试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马