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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔洪全 中级黑马   /  2013-1-15 13:47  /  1570 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

动态代理的基本定义,如何实现动态代理?简单说说就可以,用代码写我是会的,只不过对于概念性的东西我却蒙住了。

3 个回复

倒序浏览

RE: 如何实现动态代理?

动态代理最简单的理解就是代理的类型可以随时定义,
  1. public static Object getProxy(final Object target, final Adrice adrice){
  2. Object proxy = Proxy.newProxyInstance(
  3. target.getClass().getClassLoader(),
  4. target.getClass().getInterfaces(),
  5. new InvocationHandler() {

  6. @Override
  7. public Object invoke(Object proxy, Method method, Object[] args)
  8. throws Throwable {
  9. adrice.before();
  10. Object objVal = method.invoke(target, args);
  11. adrice.after();
  12. return objVal;
  13. }
  14. });
  15. return proxy;
  16. }
复制代码
例如:target传递一个TreeMap,那么代理类就创建了一个Map类型的代理类;如果传递ArrayList,那么创建的就是一个Collection类型的代理类。
这样就提高了这段代码的重用率。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
动态代理的绑定一个要代理的对象· 就是面向接口编程· 好好看一下 多态吧·
回复 使用道具 举报

RE:我的理解是样的,不知有没有问题

/**
* 动态代理
* 实现步骤:
* 1,建立目标类对象:作为主要执行内容;如:ArrayList garget= new ArrayList();
* 2,建立通告对象:  作为运行目标时需添加的功能 ;如: Advice advice = new Advice();
* 3,定义一个获得某目标类的代理的方法:
*   private static Object getProxy(final Object target,final Advice advice)//为什么要用final修饰??
*   该方法有两个参数:目标标类对象,通告类(某类)对象,并返回一个指定接口(target所实现的接口)的代理类实例,
*   如:Object proxy = newProxyInstance(ClassLoader loader,
                                      Class<?>[] interfaces,
                                      InvocationHandler h);
                 return proxy;
* 4, 定义一个目标类的接口的引用如:Collection proxy=getProxy(target,advice);
* 5,调用该代理类所代理目标类拥有的方法(会自动调用添加的功能。
* 注意:目标类必有是实现某个或某些接口
*/

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

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