设计模式之 动态代理
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class SecurityHandler implements InvocationHandler {
private Object targetObject;
/*targetObjet 为要实例的JAVA类, 在这里指的就是 UserManagerImpl
调用代码写法:
SecurityHandler handler = new SecurityHandler();
UserManager userManager = (UserManager)handler.newProxy(new UserManagerImpl());
userManager.deleteUser(1);
在调用的时候,userManager 已经是个代理的类,调用里面的deletUser()方法时,他就会去调用invoke()方法
*/
public Object newProxy(Object targetObject) {
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),
this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
checkSecurity(); // 关注点的具体实现 里面可以书写任何的检验代码
Object ret = null;
try {
ret = method.invoke(this.targetObject, args);
}catch(Exception e) {
e.printStackTrace();
throw new java.lang.RuntimeException(e);
}
return ret;
}
private void checkSecurity() {
//相应个性化的代码
System.out.println("----------checkSecurity()---------------");
}
}