·动态代理模型·
有如下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.