当前位置: 首页 > news >正文

Spring AOP 统一问题处理

目录

  • 1、AOP
    • 1.1、AOP 的组成
    • 1.2、AOP 的应用场景
  • 2、Spring AOP 的实现
    • 2.1、添加框架实现
    • 2.2、定义切面和切点
    • 2.3、定义相关通知

1、AOP

AOP(Aspect Oriented Programming):面向切面编程,是一种思想,是对某一类事情的集中处理。而 Spring AOP 是一个框架,提供了对 AOP 的实现。

1.1、AOP 的组成

以用户登录验证为例:
在这里插入图片描述

  1. 切面(Aspect):包含切点和通知,可以理解为 spring 中定义一个类,来组织一个横切一刀的逻辑。
  2. 连接点(Join Point):可以增强的一个范围。
  3. 切点(PointCut):规定匹配的条件,要增强的是哪些方法,即筛选方法。
  4. 通知(Advice):定义 AOP 统一增强的时机(方法执行前、执行后、抛异常等)。

1.2、AOP 的应用场景

对于功能统一,且使用的地方较多的功能,可以考虑 AOP 来统一处理。除了统一的用户登录判断之外,AOP还可以实现:

  • 统一日志记录
  • 统一方法执行时间统计
  • 统一的返回格式设置
  • 统一的异常处理
  • 事务的开启和提交

2、Spring AOP 的实现

2.1、添加框架实现

在 pom.xml 中添加如下配置:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2.2、定义切面和切点

在这里插入图片描述

  1. @Aspect + @Component:定义一个切面,由于 @Aspect 是 aspectj 下的注解,因此需要另外使用 @Component 注解来将该类注册到容器中。
  2. @PointCut:定义一个切点,切点表达式由切点函数组成,其中 execution() 是最常用的切点函数,用来匹配方法,语法为 execution(<修饰符><返回类型><包.类.方法(参数)><异常>),修饰符和异常可以省略。
    在这里插入图片描述
  3. 其中 pointcut() 方法是空方法,不需要有方法体,作用是“标识”,标识下面的通知方法具体指的是哪个切点(因为切点可以有多个)。

2.3、定义相关通知

通知定义的是被拦截的方法具体要执行的业务。Spring AOP 可在方法上使用以下注解,从而将方法设置为通知方法,在满足条件后会通知该方法调用。

  • 前置通知使用 @Before:通知方法会在目标方法调用之前执行。
  • 后置通知使用 @After:通知方法会在目标方法调用之后执行。
  • 返回之后通知使用 @AfterReturning:通知方法会在目标方法返回之后调用。
  • 抛异常后通知使用 @AfterThrowing:通知方法会在目标方法抛异常后调用。
  • 环绕通知使用 @Around:在被通知的方法通知之前和通知之后执行自定义的行为。
http://www.dtcms.com/a/64518.html

相关文章:

  • 【漫话机器学习系列】133.决定系数(R²:Coefficient of Determination)
  • 驻华大使夫人团探访江南铜屋 沉浸式体验中国非遗铜艺魅力
  • python机器学习theano库安装与使用
  • 本地开发MCP Server+Cline配置使用
  • 位运算刷题+总结
  • CCF-CSP备考【模拟考试系统共享】
  • 用python批量生成文件夹
  • c++介绍运算符重载九
  • 熨斗底板不平?矫平机让每寸布料都平整服帖
  • 21 | 全面测试项目功能
  • C++20 新特性总结
  • 【Vue】el-dialog的2种封装方法(父子组件双向通信),$emit触发父事件/.sync修饰符双向绑定
  • go GRPC学习笔记
  • 《鸿蒙系统下AI模型训练加速:时间成本的深度剖析与优化策略》
  • 位运算性质
  • L3-1 夺宝大赛
  • 【RAG从入门到精通系列】【RAG From Scratch 系列教程5: Retrieval】
  • 动态规划-第2篇
  • Java volatile 关键字详解
  • 华为HCIE认证用处大吗?
  • Python 字节码深度历险:dis 模块揭秘与性能优化实战
  • 数智读书笔记系列016 从《理解和改变世界》探寻AI时代的知识与智能密码
  • 命令行重启Ubuntu软件
  • 云服务器安装宝塔面板部署
  • Mac安装Neo4j图数据库
  • 使用 UNIX 命令在设计中搜索标识符:vcsfind 的入门指南
  • A测题目名称: 双机串口通信系统
  • obsidian插件:Tasks Calendar Wrapper,更清晰的任务列表系统
  • unity webgl导出嵌套html以及导入django
  • 友思特新品 | OCT-3D断层扫描成像测量系统OQ StrataScope升级2.0型号!