InvocationHandler,proxy之动态代理

来源:互联网 发布:选股软件成功率排行 编辑:程序博客网 时间:2024/04/30 11:05

初次尝试理解动态代理,有点困难。这里根据视频讲解先写下来怎么用的,回头慢慢咀嚼

public class LogInterceptor implements InvocationHandler{
private Object target;

public Object getTarget() {
return target;
}


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


public void beforeMethod(){
System.out.println("save start");
}


@Override
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {

beforeMethod();//这里加要加的实现

m.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(), new Class[]{UserDAO.class}, li);

userDAOProxy.delete();

User u = new User();
u.setUsername("zhangsan");
u.setPassword("zhangsan");
userDAOProxy.save(u);


/*class $Proxy4 implements UserDAO 
 * {
 *  save(User u) {
 *  Method m = UserDAO.getclass.getmethod 
 * li.invoke(this, m, u)
 * }
 * }
 */

原创粉丝点击