动态代理

当有一件事情需要在多个方法上面都要加相同的逻辑的时候用动态代理会省很多事情。

举个例子:
有一些实现中的方法,比如说想监测一下这些方法的性能,怎么监测呢?方法执行之前记个时间,方法执行之后记个时间

实现如下:

编写LogInterceptor类使其实现InvocationHandler接口,类体为:

private Object target;
 public Object getTarget() {return target;}

 public void setTarget(Object target) {this.target = target;}

 public void beforeMethod(Method method) {
  System.out.println(method.getName() + " start...");
 }

 @Override
 public Object invoke(Object proxy, Method method, Object[] args)
   throws Throwable {
  beforeMethod(method);
  method.invoke(target, args);
  return null;
 }

测试方法如下:

@Test
 public void testProxy() {
  UserDAO userDAO = new UserDAOImpl();
  LogInterceptor li = new LogInterceptor();
  li.setTarget(userDAO);
  UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), userDAO.getClass().getInterfaces(), li);
  userDAOProxy.save(new User());
  userDAOProxy.delete();
 }

posted on 2013-09-26 20:24  凯特的宝贝世界  阅读(150)  评论(0编辑  收藏  举报