AOP(Aspect Oriented Programming)面向切面编程:

用我目前开发的项目说一下我对AOP的理解

项目的代码层次是:应用层(API)->业务逻辑层(BLL)->数据访问层(DAO)

应用层接受客户端的请求,业务逻辑层处理业务逻(主要是写根据业务写sql语句),数据访问层连接数据库执行sql语句。

一个简单的http请求达到服务器之后,正常走的流程如下图:

java拦截器构成 java拦截器和aop_后端

比如在API中的Controller是接收客户端的http请求的,但是我想在http到达Controller之前 验证一下 用户输入的信息有没有 敏感字符(比如:' , -- , javascript 这些有安全风险的字符),如果有的话,就不让这个请求继续走到Controller了,而是直接告诉客户端输入的信息不合法。

而拦截器、过滤器都是AOP思想的实现。

AOP的简单使用

实现aop需要依赖包spring-boot-starter-aop和spring-aop,还需要在启动文件上加上注解@EnableAspectJAutoProxy //启动AOP注解扫描

创建Aspect类

一定要加 @Aspect和 @Component注解

其中@Pointcut作为切入点,@Before在切入点之前执行,@After在切入点之后执行

"execution(* lyy.ApiDemo3.com.controllers..*(..))" 代表 执行lyy.ApiDemo3.com.controllers包下的所有方法

java拦截器构成 java拦截器和aop_java_02

拦截器的简单使用

java中实现拦截器,需要两个类

1.实现HandlerInterceptor接口的类

java拦截器构成 java拦截器和aop_后端_03

2.继承WebMvcConfigurer,并重写addInterceptors方法的类(其实这个算是一个拦截器的配置类, 表明使用哪个拦截器,拦截哪些请求)

java拦截器构成 java拦截器和aop_后端_04

过滤器的简单使用

1.需要在启动类以下注解


@ServletComponentScan //扫描带@WebFilter、@WebServlet、@WebListener并将帮我们注入bean


2.创建Filter类,实现Filter

Filter类上需要加@WebFilter(urlPatterns="/Login/*")注解,这个表示过滤LoginController路径下的所有方法

java拦截器构成 java拦截器和aop_java拦截器构成_05

如果项目中同时存在过滤器、拦截器、aop,则执行顺序是过滤器->拦截器->aop。