Struts2(8):拦截器的简单实现原理
什么是拦截器:
拦截器,在AOP(Aspect-Oriented Programming)中用于在执行目标对象某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
下面模拟拦截器的实现,一共需要5个类:
1,目标对象接口 TargetInterface.java
2,目标对象接口实现类 Target.java
3,拦截器类 Interceptor.java
4,处理器类 MyHandler.java
5,代理类 MyProxy.java
1,TargetInterface接口中声明一个doSomething方法
public interface TargetInterface { public void doSomething();}public class Target implements TargetInterface {public void doSomething() {System.out.println("do something");}}public class Interceptor {public void before(){System.out.println("before...");}public void after(){System.out.println("after...");}}public class MyHandler implements InvocationHandler {private Object object;private Interceptor interceptor = new Interceptor();public void setObject(Object object) {this.object = object;}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 class MyProxy {public Object getProxy(Object object){MyHandler myhandler = new MyHandler();myhandler.setObject(object);return Proxy.newProxyInstance(Target.class.getClassLoader(), object.getClass().getInterfaces(), myhandler);}}public class Client {public static void main(String[] args) {TargetInterface target = new Target();MyProxy myProxy = new MyProxy();TargetInterface proxy = (TargetInterface)myProxy.getProxy(target);proxy.doSomething();}}