解耦、弥补 OOP 功能不足,Spring Boot 后端技术之一文读懂 AOP 切面!

什么是AOP?

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

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

主要目的是为了解耦

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

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

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

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

1 AOP主要注解

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

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

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

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

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

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

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

2 AOP常用表达式标签

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

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

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

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

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

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

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

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

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

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

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

execution表达式

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

3 execution匹配示例

public .(..):匹配任意公共方法

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

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

4AOP使用方式

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

5 AOP示例

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

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

全部资料获取

猜你喜欢

转载自blog.csdn.net/wx17343624830/article/details/131462615