黑马程序员技术交流社区

标题: 关于动态代理技术的问题 [打印本页]

作者: 水蓝    时间: 2014-3-15 00:19
标题: 关于动态代理技术的问题
本帖最后由 水蓝 于 2014-3-25 22:55 编辑

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

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

作者: 水蓝    时间: 2014-3-18 12:28
没人回额?补充一下问题吧,贴段代码上来。
  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. }
复制代码

作者: 630681386@qq.co    时间: 2014-3-18 15:31
可以更改配置文件
作者: 水蓝    时间: 2014-3-18 15:39
630681386@qq.co 发表于 2014-3-18 15:31
可以更改配置文件

你是说,通过反射来加载类?:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2