读书人

设计方式之 动态代理

发布时间: 2012-11-09 10:18:48 作者: rapoo

设计模式之 动态代理
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()---------------");

}



}

读书人网 >软件开发

热点推荐