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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 水蓝 中级黑马   /  2014-3-15 00:19  /  1252 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 水蓝 于 2014-3-25 22:55 编辑

在JAVA基础加强的第49~51视频中,讲解了动态代理技术的用法。
但有一件个问题,想请大家帮忙想下。
动态代理,有时候,是用在代码的运行验证过程中的。
比如:
在方法调用前打印时间、在方法调用后打印时间。或者计算打印时间差。

那如果我的程序验证OK,需要交付,不需要再有打印时间这种操作了。
我是需要重新修改代码结构调整相关代码?还是有什么其它的方法?

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

3 个回复

正序浏览

你是说,通过反射来加载类?:)
回复 使用道具 举报
可以更改配置文件
回复 使用道具 举报
没人回额?补充一下问题吧,贴段代码上来。
  1. public class ProxyTest {
  2.         public static void main(String[] args) {
  3.                 List<String> array = new ArrayList<String>();
  4.                 //如果哪天我的程序要交付了,不想用这个代理算时间了,那该怎么办呢?
  5.                 List<String> strs = (List<String>)getProxy(array);
  6.                 strs.add("1");
  7.                 strs.get(0);
  8.                 strs.remove(0);
  9.         }

  10.         /**
  11.          * 这个代理其实就是想打印方法的运行时间的
  12.          * @param target
  13.          * @return
  14.          */
  15.         private static Object getProxy(final Object target) {
  16.                 Object obj = Proxy.newProxyInstance(target.getClass().getClassLoader(),
  17.                                  new Class[]{List.class},
  18.                                  new InvocationHandler() {
  19.                         @Override
  20.                         public Object invoke(Object proxy, Method method, Object[] args)
  21.                                         throws Throwable {
  22.                                 System.out.println("before:" + System.currentTimeMillis());
  23.                                 Object obj = method.invoke(target, args);
  24.                                 System.out.println("after" + System.currentTimeMillis());
  25.                                 return obj;
  26.                         }
  27.                 });
  28.                 return obj;
  29.         }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

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