读书人

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

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

简单实现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();}}
?注意分析每个类之间的关系,理解反射与代理

读书人网 >软件架构设计

热点推荐