什么是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%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。