动态代理
当有一件事情需要在多个方法上面都要加相同的逻辑的时候用动态代理会省很多事情。
举个例子:
有一些实现中的方法,比如说想监测一下这些方法的性能,怎么监测呢?方法执行之前记个时间,方法执行之后记个时间
实现如下:
编写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();
}