Spring Boot 后端技术之 AOP

发布于 更新于
本文目录
  1. AOP简介
  2. AOP主要注解
  3. AOP常用表达式标签
  4. execution表达式
  5. AOP使用方式
  6. AOP示例

技术文章测试开发

面向切面编程(Aspect Oriented Programming),从不同的维度或角度给已有程序添加附加功能的一种技术

AOP简介

  • 面向切面编程(Aspect Oriented Programming),从不同的维度或角度给已有程序添加附加功能的一种技术

  • 实现的方式是Spring容器为程序创建代理,让调用方无感知的调用指定方法,在运行期间动态的“织入”其他逻辑

  • 主要目的是为了解耦

  • 弥补OOP中只能继承类或实现接口进行功能扩充的不足

  • 让应用逻辑更加清晰,业务逻辑只关注业务本身

  • 可以获取拦截方法请求的参数和返回,但不能获取HTTP信息

  • 主要应用场景:声明式事务、服务权限过滤、缓存、全局日志和一些框架的持久化

AOP主要注解

  • @Aspect:定义一个切面,一般作用于类上

  • @Pointcut(value=“表达式标签”):定义切入点,可以指定相应的包、类、注解做为切入点,有12种表达式标签,常用的为execution(表达式),表达式又支持很多种格式

  • @Before:切入点方法执行前调用

  • @After:切入点方法执行后调用

  • @AfterReturning:切入点方法正常执行并成功返回后调用

  • @AfterThrowing:切入点方法产生并抛出异常后调用

  • @Around:切入点方法环绕处理,完全控制方法是否执行,能在方法执行前、执行后添加相应的逻辑,可以理解为包含上述所有逻辑

AOP常用表达式标签

  • execution:匹配方法执行的连接点

  • within:匹配指定类型内的方法执行

  • this:匹配当前AOP代理对象类型的执行方法

  • target:匹配当前目标对象类型的执行方法

  • args:匹配当前执行的方法传入的参数为指定类型的执行方法

  • @within:匹配所以持有指定注解类型内的方法

  • @target:匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解

  • @args:匹配当前执行的方法传入的参数持有指定注解的执行

  • @annotation:匹配当前执行方法持有指定注解的方法

  • bean:Spring AOP扩展的,匹配特定名称的Bean对象的执行方法

了解即可,不需要记住,有业务需要的时候,再去看详细的内容

execution表达式

  • execution包含的表达式,支持各种格式,了解常用的就好,使用时根据业务需要再去学习相应的匹配模式 常用的匹配通配符有 *:匹配任何数量字符 ..:匹配任何数量的子包,或方法中的任意多个参数 +:匹配指定类型及子类型 execution匹配示例 public .(..):匹配任意公共方法

  • com.lemon.demo.UserService.*():匹配com.lemon.demo.UserSerivce下的所有无参方法,返回值类型任意

  • com.lemon.demo.springboot3.service.UserService.getById(..):匹配userService.getById方法,传入参数任意,返回值任意

AOP使用方式

1、引入依赖:在pom.xml中添加对spring-boot-starter-aop的依赖 2、定义切面:定义一个类,使用@Aspect注解修饰,并注意加上@Component注解 3、定义切入点:在类中添加一个方法,使用@Pointcut注解修饰成切入点 4、拦截逻辑:在类中添加一个方法,使用@Around(“切入点注解的方法名”)注解修改成环绕拦截

AOP示例

见附件中aop包中的两个分别基于getById的方法拦截、基于@Log注解拦截处理,通过控制台查看拦截效果

附件:useraop.zip

来源:testingpai

继续阅读