Struts2.0之类输入校验篇之六(拦截器中的动态代理)
来源:互联网 发布:大数据的建模分析 编辑:程序博客网 时间:2024/06/10 16:51
这儿先讲一下 动态代理,这个是Struts2拦截器实现的基础.
1>首先建立一个目标类的接口
package src;
public interface ITraget
{
public void doSomething();
}
2>然后实现这个接口,建一个目标类
package src;
public class Traget implements ITraget
{
public void doSomething()
{
System.out.println("doSomething is invoked!");
}
}
3>再建一个拦截器,其实就是一个普通的类,加几个方法就是了
package src;
public class Intercepter
{
public void doBefore()
{
System.out.println("doBefore");
}
public void doAfter()
{
System.out.println("doAfter");
}
}
4>这儿需要一个东西,把拦截器和目标对象整合起来.实现目标对象的函数拦截.
这儿的目标对象必须是可变的, 但是拦截器是不能变的
也就是说,这个整合器和拦截器依赖的,和目标对象是不依赖的.
JDK已经给我们定义了一个接口,实现它就可以得到一个整合器
在JDK 1.5的API文档的索引那儿,输入"InvocationHandler"
可以看到反射的文档.
package src;
import java.lang.reflect.*;
public class MyHandler implements InvocationHandler
{
//和目标对象是不依赖的
private Object trgobj;
public void setObj(Object obj)
{
this.trgobj = obj;
}
//--整合器和拦截器依赖的
private Intercepter intercepter = new Intercepter();
//--实现这个invoke函数,但是那个Object proxy不小的来干什么的.
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object rlt = null;
this.intercepter.doBefore();
rlt = method.invoke(this.trgobj, args);
this.intercepter.doAfter();
return rlt;
}
}
5>还需要通过Proxy的一个静态方法newProxyInstance,传入目标对象,
然后返回代理后的一个对象(这个代理后的对象就是加入了拦截器的)
这儿建一个类来包装这个方法:
package src;
import java.lang.reflect.*;
public class MyProxy
{
public Object getProxy(Object trgObj)
{
MyHandler myHandler = new MyHandler();
myHandler.setObj(trgObj);
return Proxy.newProxyInstance(trgObj.getClass().getClassLoader(),
trgObj.getClass().getInterfaces(),
myHandler);
}
}
6>好了,这下,写一个Client来测试就可以了.
package src;
public class Client {
/**
* @param args
*/
public static void main(String[] args)
{
//ITraget traget = new Traget();
MyProxy proxy = new MyProxy();
ITraget proxyTraget = (ITraget)proxy.getProxy(new Traget());
proxyTraget.doSomething();
}
}
- Struts2.0之类输入校验篇之六(拦截器中的动态代理)
- Struts2.0之类输入校验篇之七(拦截器配置)
- Struts2.0之类输入校验篇之四(非字段校验 validator)
- Struts2.0之类输入校验篇一
- Struts2.0之类输入校验篇之五(addFieldError和addActionError的实现原理)
- Struts2.0之类输入校验篇三(字段校验 field)
- 六、Struts2之输入校验
- Struts2.0之类输入校验篇十三(Struts2的国际化(i18n))
- Struts2.0之类输入校验篇十六(struts2伸入探索续)
- Struts2.0之类输入校验篇十七(struts2伸入探索续2)
- Struts2.0之类输入校验篇九(文件的上传和下载)
- Struts2.0之类输入校验篇十(文件的上传和下载续)
- Struts2.0之类输入校验篇十二(文件的上传和下载续三)
- (六)struts2之拦截器
- Struts2中的输入校验
- 输入校验二(struts2中的输入校验,服务器端)
- Struts2拦截器校验
- struts2 之 输入校验
- thunderbird配置
- SQL操作全集
- 交叉编译u-boot--目标开发板SBC-2410X
- Cookie和Session专题
- Struts2.0之类输入校验篇之五(addFieldError和addActionError的实现原理)
- Struts2.0之类输入校验篇之六(拦截器中的动态代理)
- VS2008的开发asp.net AJAX 初体验
- Struts2.0之类输入校验篇之七(拦截器配置)
- 大话西游之GUI编程—(—)DOS时代
- 显示的图形为什么会闪烁?
- ICTCLAS的C#调用时的BUG
- KMP算法深度解析
- 查询同一表内多字段同时重复记录的SQL语句
- C# Image和字节流的互化