AOP

概念

AOP 是一种编程思想,并不是一种具体的实现,谈到实现一般有Filter和代理模式两种常见的使用方式,AOP 也是封装代理模式完成的,可以说是OOP(面向对象编程)的补充和完善。OOP 利用封装、继承和多态把一切事物打造成对象结构,但是对于所有对象中都存在的一些公共行为,OOP 就显得无能为力,也就是说OOP 允许你定义从上到下的关系,但并不适合定义从左到右的关系。抽象和接口虽好,但对所有不相干的对象建立共同的接口或父类未免有些生硬,例如日志功能,日志代码几乎散布在所有的对象层次中,而它和散布到对象的核心功能毫无关系,对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。因此,为减少这种大量的重复代码,面向切面技术诞生了,以此之长,补彼之短。

Java中常见的AOP 技术有两个,分别是Filter和代理模式(也可以称为过滤器和拦截器),Filter 是基于回调函数,代理模式是基于Java 反射技术,代理模式又分为静态代理和动态代理,动态代理就是拦截器的简单实现。他们各自实现的功能不同,原理如出一辙。

AOP术语

AOP 领域中的特性术语:

通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。切点(PointCut): 可以插入增强处理的连接点。比如所有的controller,切点就是@Pointcut("within(com.test.act.web..*) ")切面(Aspect): 切面是通知和切点的结合。引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。

AOP 应用—基于springboot

目前在项目中比较典型的应用就是日志打印

拦截器

概念

拦截器是在Service或者一个方法前调用一个方法,或者在方法后调用一个方法。比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

特点

1.拦截器是基于java发射机制实现的2.拦截器是spring特有的,能使用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等3.拦截器既可以用于Web程序,也可以用于Application、Swing程序中4.拦截器能够深入到方法前后、异常抛出前后,伸缩性较大

应用- 基于springboot开发


编写拦截器配置文件类并继承 WebMvcConfigurer类,并重写其中的方法

过滤器

概念

Filter 过滤器是 JavaWeb 的三大组件之一。(Servlet、Filter、Listener);Filter 过滤器它是 JavaEE 的规范,可以在浏览器以及目标资源之间起到一个过滤的作用,它的作用是:拦截请求,过滤响应;web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。Filter过滤器主要用来过滤用户的请求,允许用户对请求进行前置处理和后置处理,比如实现 URL 级别的权限控制、过滤非法请求等等。

特点

1.Filter是基于回调函数2.Filter是Servlet规范固定的,只能用于Web程序中3.Filter在只在Servlet启动前后起作用,范围较窄

应用

方式一:单独创建一个filter的类继承Filter接口,重写接口里面的init()、doFilter()、destory()方法即可。

方式二:配置过滤器

主方法上添加注解扫描


本文分享自微信公众号 - 技术茶话会(coder-party)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

03-09 20:59