java代理的实现

1、新建一个接口UserDao

public interface UserDao{

public void save(User u);

}

 

2、实现接口

public class UserDaoImpl implements UserDao{

public void save(User u){

system.out.println(u+"save!");

}

}

 

3、新建业务逻辑对象,实现在调用被代理对象的方法时添加日志

public class LogIntercepter implements InvocationHander{

private Object target;//目标对象,也叫被代理对象

public Object getTarget(){

return target;

}

public Object setTarget(Object target){

this.target =target;

}

public void beforeMethod(Method m){

system.out.println(m.getName()+" start,Log remeber!");

}

public Object invoke(Object proxy,Method m,Object[] args){

beforeMethod(m);

m.invoke(target,args);

return null;

}

}

 

public void TestProxy(){//测试方法

UserDao userDao=new UserDaoImpl();

LogIntercepter li=new LogIntercepter();

li.setTarget(userDao);//设置被代理对象

UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), userDAO.getClass().getInterfaces(), li);

//userDAOProxy 是userDao的代理对象
userDAOProxy.save(new User());

}

 

 

原生java实现动态代理几个关键点

1、被代理对象必须是接口形式

2、具体的业务逻辑对象必须实现InvocationHander接口,并重写invoke方法,同时将代理对象能够设置进去

3、创建代理对象时Proxy.newProxyInstance(。。。)方法,注意传入参数

 

posted @ 2016-07-14 22:59  huangssd  阅读(285)  评论(0编辑  收藏  举报