首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

容易实现Struts2拦截器功能的模拟代码

2012-11-10 
简单实现Struts2拦截器功能的模拟代码TargerInterface:(目标接口,定义方法)package com.interceptorpubli

简单实现Struts2拦截器功能的模拟代码

TargerInterface:(目标接口,定义方法)

package com.interceptor;public interface TargerInterface {public void doSomething();}
Target:(目标类,实现方法)?
package com.interceptor;public class Target implements TargerInterface {public void doSomething() {System.out.println("do something in Target class...");}}
?Interceptor:(拦截器类,写拦截前后需要处理的方法)
package com.interceptor;public class Interceptor {public void before(){System.out.println("before...");}public void after(){System.out.println("after...");}}
?MyHandler:(反射处理,将目标和拦截关联起来,这里开始耦合)
package com.interceptor;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyHandler implements InvocationHandler {private Object object;private Interceptor interceptor = new Interceptor(); public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object result = null;interceptor.before();result = method.invoke(object, args);interceptor.after();return result;}public void setObject(Object object) {this.object = object;}}
?MyProxy:(代理类,实现反射加载)
package com.interceptor;import java.lang.reflect.Proxy;public class MyProxy {public Object getProxy(Object object){MyHandler myHandler = new MyHandler();myHandler.setObject(object);return Proxy.newProxyInstance(Target.class.getClassLoader(), object.getClass().getInterfaces(), myHandler);}}
?Client:(测试类)
package com.interceptor;public class Client {public static void main(String[] args) {TargerInterface target = new Target();MyProxy myProxy = new MyProxy();TargerInterface proxy = (TargerInterface)myProxy.getProxy(target);proxy.doSomething();}}
?注意分析每个类之间的关系,理解反射与代理

热点排行