AOP(Aspect Oriented Programming)面向切面编程:
用我目前开发的项目说一下我对AOP的理解
项目的代码层次是:应用层(API)->业务逻辑层(BLL)->数据访问层(DAO)
应用层接受客户端的请求,业务逻辑层处理业务逻(主要是写根据业务写sql语句),数据访问层连接数据库执行sql语句。
一个简单的http请求达到服务器之后,正常走的流程如下图:
比如在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中实现拦截器,需要两个类
1.实现HandlerInterceptor接口的类
2.继承WebMvcConfigurer,并重写addInterceptors方法的类(其实这个算是一个拦截器的配置类, 表明使用哪个拦截器,拦截哪些请求)
过滤器的简单使用
1.需要在启动类以下注解
@ServletComponentScan //扫描带@WebFilter、@WebServlet、@WebListener并将帮我们注入bean
2.创建Filter类,实现Filter
Filter类上需要加@WebFilter(urlPatterns="/Login/*")注解,这个表示过滤LoginController路径下的所有方法
如果项目中同时存在过滤器、拦截器、aop,则执行顺序是过滤器->拦截器->aop。