spring AOP
https://www.cnblogs.com/jiangyi-uestc/p/5755133.html
Spring动态代理
AOP面向切面编程
面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去(职责分配),即让不同的类设计不同的方法。好处是:降低了代码的重复程度,使类可重用。缺点:在分散代码的同时,增加了代码的重复性。如:在两个类中,可能都需要在每个方法中做日志,根据面向对象的方法,必须在两个类的方法中都加入日志的内容。虽然内容相同,但是因为面向对象的设计让类与类之间无法联系,导致不能将这些重复的代码统一起来。
可以在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
1、AOP面向切面编程:Aspect-Oriented Programming
允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的要求。如:在不改变原来业务逻辑模型的基础上,可动态地增加日志,安全或异常处理的功能。
1、过滤器
Filter使用户可以改变一个request并且修改一个response。Filter不是一个Servlet,不能产生一个response,但它能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response。Filter其实是一个”Servlet Chainning”(Servlet链)
一个filter的作用包括以下几个方面:
(1)、在Servlet被调用之前截获
(2)、在Servlet被调用之前检查Servlet Request。
(3)、根据需要修改Request头和Request数据。
(4)、根据需要修改Response头和Response数据。
(5)、在Servlet被调用之后截获。
2、优点和缺点:
过滤器可以对几乎所有请求进行过滤,缺点是一个过滤器实例只能在容器初始化时调用一次。
3、使用过滤器的目的
用来做一些过滤操作,获取我们想要获取的数据。如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。
10、拦截器Interceptor
拦截器不依赖于Servlet容器,依赖于Web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种应用。
由于拦截器是基于web框架的调用,因此可以使用Spring的控制反转获取容器中的各个bean,进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。缺点:只能对controller请求进行拦截,对其他的一些(如直接访问静态资源的请求)则没办法拦截处理,拦截器在堆请求权限鉴定方面有很大用处。
Spring过滤器和拦截器的区别
1、联系
(1)、Spring中拦截器与Servlet的过滤器,二者都是AOP编程思想的体现。
(2)、都能实现权限检查、日志记录等。
2、区别
(1)、使用范围不同
Filter过滤器是Servlet规定的,只能用于web程序;
Interceptor拦截器既可以用于Web程序,也可用于Apllication,Swing程序中。
(2)、规范不同
Filter过滤器是Servlet规范定义的,是Servlet容器支持的;
Interceptor拦截器是在Spring容器内的,Spring框架所支持的。
(3)、使用资源不同
同其他代码块一样,拦截器是一个Spring的组件,由Spring管理。配置在Spring中,因此能使用Spring中的任何资源、对象,例如Service对象、数据源、事务管理等。该实现可以通过IoC(控制反转)注入到拦截器即可,而filter过滤器则不能。
(4)、深度不同
Filter只在Servlet前后起作用,而拦截器能深入到方法前后,异常抛出前后因为拦截器的使用具有更大的弹性,所以在spring中优先使用拦截器