Java拦截器
来源:互联网 发布:任天堂vb算vr吗 编辑:程序博客网 时间:2024/06/16 03:09
java拦截器是基于动态代理(反射机制)实现的。
拦截器是AOP(Aspect Oriented Programming,即面向方面编程的技术)的一个实现
业务接口和业务实现类
public interface IOAService { public void onclineOffice();}
public class OAService implements IOAService { @Override public void onclineOffice() { System.out.println("onclineOffice工作中。。。"); }}
Brightmart的动态代理类,它有两个普通方法:before和after.
//Brightmart自定义的拦截器类,它有两个普通方法:before和afterpublic class BrightmartInterceptor { public void before() { System.out.println("Brightmart的拦截器类,的before()方法"); } public void after() { System.out.println("Brightmart的拦截器类,的after()方法"); }}
Brightmart的动态代理类,用于代理某个类。本示例中我们用来代理【OA办公系统】服务类,目标是将特定的任务绑定到【OA办公系统】服务类之前或之后来执行。我们可以认为在绑定了绑定被代理类和代理处理器(bind()),并显示调用被代理类的方法时候,invoke便被执行
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class BrightmartDynamicProxy implements InvocationHandler { // 被代理的对象 private Object object; // Brightmart自定义的拦截器(它是一个普通的类) private BrightmartInterceptor interceptor = new BrightmartInterceptor(); // 动态生成一个代理类对象,并绑定被代理类(object)和代理处理器(this). // 或者说:bind方法返回一个特定的,具有代理功能的对象,这个对象根据传入的被代理对象的接口而定。 public Object bind(Object object) { this.object = object; return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this); } // method:被调用的方;args:方法的参数;标记为1,2的方法可以根据你业务需要而改动,或只在调用前或调用后执行某种操作 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; interceptor.before();// 1 调用before方法 method.invoke(object, args); interceptor.after();// 2 调用after方法 return result; }}
执行自定义拦截器类
public class TestBrightmartInterceptor { public static void main(String[] args) { // Brightmart自己实现的拦截器,调用bind方法获取一个代理类,这个代理类调用原有的业务逻辑类(被代理类)的方法。 BrightmartDynamicProxy handler = new BrightmartDynamicProxy(); IOAService oaService = new OAService(); IOAService oaServiceProxy = (IOAService) handler.bind(oaService);// 关键代码 oaServiceProxy.onclineOffice(); }}
运行结果如下:
Brightmart的拦截器类,的before()方法
我们使用OA在线办公系统onclineOffice,工作中(onlineOffice)。。。
Brightmart的拦截器类,的after()方法
0 0
- Java简单拦截器
- java实现拦截器
- java 拦截器
- java 拦截器、过滤器
- java拦截器原理
- JAVA Web 拦截器
- java拦截器
- java 拦截器、过滤器
- java拦截器模型
- Java简单拦截器
- Java 注解 拦截器
- java拦截器实例
- Java 过滤器 拦截器
- Java拦截器
- java之拦截器
- 拦截器---java
- java实现拦截器
- java登录拦截器
- dpreview外推软件
- 让低版本浏览器兼容placeholder
- Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
- bandcamp外推软件
- 背包之01背包、完全背包、多重背包详解
- Java拦截器
- 数据链路层的负载均衡(Bonding)
- (53)Java学习笔记——网络编程 / TCP协议
- 一种拦截AJAX数据的方法
- 无人机项目的打算
- 学习杂记
- spark学习
- 更新展示互动sdk后,报java.lang.UnsatisfiedLinkError: No implementation found for void错误
- 线程函数