拦截器模式
什么是拦截器模式?
拦截器模式依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
---------------------------以上是知乎上搜来的解释,下边是我自己对拦截器模式的理解-------------------------
上课了解到SpringMVC的底层就是拦截器模式,框架提供一个接口和一个方法,让目标类的每个方法执行时都会走一遍流程:执行Interceptor实现类定义的方法,先执行before,这个方法会返回一个布尔值,如果返回为true则继续执行目标对象业务方法,若返回为false执行around方法,最终都会执行after方法。
要怎么才能实现拦截器?动态代理就很适合做这件事。
代理类接收目标类和Interceptor实现类,将运行流程写在InvocationHandler的Invoke方法中。
这样就会调用目标类的每一个方法都会使用到拦截器,而且没有侵入目标类源代码。