Java实现的拦截器
来源:互联网 发布:怎么修改淘宝发货电话 编辑:程序博客网 时间:2024/05/18 03:12
拦截器在在流行的开源框架中很常见,依赖的技术就是Java的动态代理。
理解拦截器的核心原理对理解这些开源框架的体系结构至关重要。
下面以一个简单的模型的来说明拦截器的实现的一般方法。
模型分为以下模块:
业务组件:是被代理和被拦截的对象。
代理处理器:实现了InvocationHandler接口的一个对象
代理对象:Proxy对象。
拦截器:普通的JavaBean,在调用业务方法的之前或者之后会自动拦截并执行自己的一些方法。
客户端:执行业务处理的入口。
以下是模型的实现
一、业务组件:分为业务接口和业务类
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-3-20 23:32:06 * Company: LavaSoft(http://lavasoft.blog.51cto.com/) * 业务组件接口 */ public interface BusinessInterface { public void doSomething(); } /** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-3-20 23:31:12 * Company: LavaSoft(http://lavasoft.blog.51cto.com/) * 业务组件 */ public class BusinessClass implements BusinessInterface{ public void doSomething() { System.out.println("业务组件BusinessClass方法调用:doSomething()"); } }
二、代理处理器:包含了业务对象绑定动态代理类的处理,并实现了InvocationHandler接口的invoke方法。
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-3-20 23:24:10 * Company: LavaSoft(http://lavasoft.blog.51cto.com/) * 动态代理处理器工具 */ public class DynamicProxyHandler implements InvocationHandler { private Object business; //被代理对象 private InterceptorClass interceptor = new InterceptorClass(); //拦截器 /** * 动态生成一个代理类对象,并绑定被代理类和代理处理器 * * @param business * @return 代理类对象 */ public Object bind(Object business) { this.business = business; return Proxy.newProxyInstance( //被代理类的ClassLoader business.getClass().getClassLoader(), //要被代理的接口,本方法返回对象会自动声称实现了这些接口 business.getClass().getInterfaces(), //代理处理器对象 this); } /** * 代理要调用的方法,并在方法调用前后调用连接器的方法. * * @param proxy 代理类对象 * @param method 被代理的接口方法 * @param args 被代理接口方法的参数 * @return 方法调用返回的结果 * @throws Throwable */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; interceptor.before(); result=method.invoke(business,args); interceptor.after(); return null; //To change body of implemented methods use File | Settings | File Templates. } }
三、拦截器:普通的JavaBean,在调用业务方法的之前或者之后会自动拦截并执行自己的一些方法。
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-3-20 23:26:31 * Company: LavaSoft(http://lavasoft.blog.51cto.com/) * 拦截器 */ public class InterceptorClass { public void before(){ System.out.println("拦截器InterceptorClass方法调用:before()!"); } public void after(){ System.out.println("拦截器InterceptorClass方法调用:after()!"); } }
四、模拟客户端:执行业务处理的入口。
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-3-21 0:32:55 * Company: LavaSoft(http://lavasoft.blog.51cto.com/) * 客户端 */ public class Client { public static void main(String args[]) { DynamicProxyHandler handler = new DynamicProxyHandler(); BusinessInterface business = new BusinessClass(); BusinessInterface businessProxy = (BusinessInterface) handler.bind(business); businessProxy.doSomething(); } }转载自:http://blog.csdn.net/agileclipse/article/details/9057857
0 0
- Java实现的拦截器
- Java实现的拦截器
- Java实现的拦截器
- java实现的拦截器
- Java实现的拦截器
- Java实现的拦截器
- Java实现的拦截器
- java实现拦截器
- java实现拦截器
- Java实现的拦截器模型
- Java实现的拦截器模型
- 【java】spring拦截器的实现
- Java Struts 实现拦截器
- PHP简单拦截器实现方法【参考java的AOP】
- 使用Java动态代理实现的拦截器
- 使用java配置类实现spring mvc的拦截器
- spring 拦截器的实现
- spring 拦截器的实现
- 有道词典
- 策略模式
- CTreeCtrl 控件使用总结
- Java回调机制解析
- [linux-kernel] 实现支持poll的驱动设备
- Java实现的拦截器
- 开放平台-AS400通讯
- 页面请求跳转
- 在电脑上配置CocoaPods的步骤
- Android 缓存框架 ASimpleCache
- 计算机参考书籍
- 不用sqrt()函数,如何求平方根
- 小胖说事22-----iOS开发技巧之取消键盘响应和截屏功能
- Http 请求头的详细解释