AOP切面使用
2021/6/9 18:51:33
本文主要是介绍AOP切面使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、主要设计注解: @Aspect @After @before @Pointcut @Around
pom文件引入
<!--用于aop切面编程-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
二、AOP核心概念
1、横切关注点
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut)
对连接点进行拦截的定义
5、通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象
代理的目标对象
7、织入(weave)
将切面应用到目标对象并导致代理对象创建的过程
8、引入(introduction)
在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
execution后面参数的定义
eg.
- 任意公共方法的执行:execution(public * *(..))
- 任何一个以“set”开始的方法的执行:execution(* set*(..))
- AccountService 接口的任意方法的执行:execution(* com.xyz.service.AccountService.*(..))
- 定义在service包里的任意方法的执行: execution(* com.xyz.service.*.*(..))
- 定义在service包和所有子包里的任意类的任意方法的执行:execution(* com.xyz.service..*.*(..))
第一个*表示匹配任意的方法返回值execution(* , ..(两个点)表示零个或多个参数,第一个..表示service包及其子包,第二个*表示所有类, 第三个*表示所有方法,第二个..表示方法的任意参数个数
注解实现:
1、引入注解
2、顶一个切面类LogAspect ,要对下面Controller下面所有类进行切面
具体代码:
@Aspect @Order(1)//指定切面的优先级 @Component @EnableAspectJAutoProxy //使aspect起作用 自动匹配代理对象 public class LogAspect { @Pointcut("execution(* com.example.springbootproject.Controller.*.*(..))")//定义在Controller包里所有类,所有的方法的任意方法的执行 public void apilog() { } @Before("apilog()") public void doBefore() { System.out.printf("Before方法执行"); } @After("apilog()") public void doAfter() { System.out.printf("after方法执行"); } @Around("apilog()") //这里必须有返回对象,否则切面接口 void就会出现无返回 public Object logArround(ProceedingJoinPoint joinPoint) throws Throwable { Object[] args = joinPoint.getArgs(); System.out.println("环绕前入参:"+JSON.toJSONString(args[0])); System.out.println(joinPoint.getSignature()); Object proceed = joinPoint.proceed(); System.out.println("出参:"+JSON.toJSONString(proceed)); System.out.println("环绕后"); return proceed; } }
执行结果:
这篇关于AOP切面使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞