设计模式之 动态代理
来源:互联网 发布:话不多但语出惊人知乎 编辑:程序博客网 时间:2024/05/16 05:22
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()---------------");
}
}
说明:
1. newProxy(Object targetObject) 是用来获得一个代理实例
2. UserManagerImpl() 是自己写的一个类, 我们现在对它生成代理
3. invoke() 调用生成代理类调用它的方法,它调用了这个方法
4 checkSecurity() 这是一个自己定义的一个方法:例如:登录验证不影响业务逻辑的功能代码
- 设计模式之代理模式-------动态代理
- 设计模式之 动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之--动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之--动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之静态代理&动态代理
- 设计模式之代理模式--静态代理和动态代理
- 设计模式之 动态代理模式
- java设计模式之动态代理模式!
- 设计模式之动态代理模式
- 设计模式之 动态代理模式
- 设计模式之动态代理模式
- 6/14 09东北赛热身1
- 数据类型
- 解决HttpContext.Current.Request.Files返回的文件个数不正确问题
- ActiveMQ教程(一)
- 今天尝试抓取网页为图片,但是遇到了一点小困难
- 设计模式之 动态代理
- SQL Server 分布式查询(暂且三种)
- 通用的权限管理系统的设计
- eclipse使用LWUIT时报错java.lang.NoClassDefFoundError解决方法
- 竞争力评价
- Not the least
- 还是这里的气氛比好
- 关于CListCtrl中的标题头大小控制
- 程序更年期