标签:
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(。。。)方法,注意传入参数
标签:
原文地址:http://www.cnblogs.com/huangssd/p/5672043.html