java动态代理处理事务

来源:互联网 发布:刚出土的兵马俑知乎 编辑:程序博客网 时间:2024/06/07 01:22

·动态代理模型·
有如下UserManage接口:

public interface UserManager{    //增加用户接口    public void addUser(User user);    //删除用户    public void deleteUser(String userId);    //修改用户    public void updateUser(User user);    //根据id获取用户信息    public User findUserById(String userId);}

实现类:

public class UserManagerImpl implements UserManager{    public void addUser(User user){        System.out.println("--addUser()--");    }    public void deleteUser(String userId){        System.out.println("--deleteUser()--");    }    public void updateUser(User user){        System.out.println("--updateUser()--");    }    public User findUserById(String userId){        System.out.println("--findUserById()--");        return null;    }}

编写代理类:

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class SecurityHandler implements InvocationHandler{    //代理的目标    private Object targetObject;    public Object createProxyInstance(Object targetObject){        this.targetObject = targetObject;        //根据目标生成代理        return Proxy.newProxyInstance(targerObject.getClass().getClassLoader(),        targetObject.getClass().getInterfaces(),        this);    }    public Object invoke(Object proxy, Method method, Object[] args){        Object ret = null;        //调用检查权限的方法        if(checkSomething()){        //调用代理目标的方法            ret = method.invok(targetObject,args);        }        return ret;    }    //执行代理的类的方法之前检查的方法    public boolean checkSomething(){        // do some check.        System.out.println("--checkSomething()--");        return false;    }}

End.

原创粉丝点击