拦截器的实现原理.docVIP

  • 19
  • 0
  • 约 3页
  • 2015-09-26 发布于重庆
  • 举报
拦截器的实现原理

在了解Struts2中拦截器使用方式之前,先展示拦截器的底层实现原理是如何的。之前也说了拦截器是一个普通的Java对象,而被拦截的正常执行业务逻辑功能的类也是一个普通的Java对象,那么如何使这两个对象进行关联,并且如何知道这两个对象执行的先后顺序。 技术要点 本节代码演示拦截器如何实现,介绍的知识点如下: 拦截器类和被拦截类内容。 运用反射机制调用类和类方法。 设置拦截器处理类,配置拦截器在何时执行以及拦截器类和被拦截类执行先后顺序。 设置代理对象类实现拦截器拦截功能。 测试程序运行结果显示拦截功能正常执行情况演示代码 功能执行类:Java代码 package com.liu; public interface ExecuteFunctionInterface { public void execute(); } 功能执行接口: Java代码 !---------文件名:ExecuteFunctionInterface.java-------- package com.liu; public interface ExecuteFunctionInterface { public void execute(); } 拦截器类: Java代码 !---------文件Interceptor.java-------- package com.liu; public class Interceptor { // 拦截执行功能类之前执行方法 public void beforeDoing() { System.out.println(before doing Something...); } // 拦截执行功能类之后执行方法 public void afterDoing() { System.out.println(after doing Something...); } } 拦截器处理类:Java代码 !---------文件InterceptorHandler.java-------- package com.liu; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; //拦截器处理类 public class InterceptorHandler implements InvocationHandler { private Object object; private Interceptor inter = new Interceptor(); // 设置需要拦截的执行功能类 public void setObject(Object object) { this.object = object; } // 接口invoke方法,proxy是代理实例,method是实例方法,args是代理类传入的方法参数。 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { inter.beforeDoing(); // object提供该方法的类实例,args是调用方法所需的参数值的数组 Object returnObject = method.invoke(object, args); inter.afterDoing(); return returnObject; } } 代理对象类: Java代码 !----------文件名:ProxyObject.java----------package com.liu; import java.lang.reflect.Proxy; public class ProxyObject { private InterceptorHandler handler = new InterceptorHandler(); // 得到执行类的代理对象实例public Object getProxy(Object object) { handler.setObject(object); // 创建对象实例 Return Proxy.newProxyInstance(ExecuteFunction.class.getClassLoader(), object.getClass().getInterfaces(), handler);} }测试程序: Java代码 !---------------文件名:TestInterceptor.java---------------package

文档评论(0)

1亿VIP精品文档

相关文档