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

Spring AOP:使用Spring AOP进行切面编程的实例,解释不同类型的advice(advice类型)以及何时使用它们

I. Spring AOP 简介

AOP的含义和用途:

 

AOP,全称Aspect Oriented Programming,即面向切面编程,是一种编程范式,与面向对象编程(OOP)并列。AOP是一种处理程序中横切关注点的技术,这些横切关注点包括日志记录,安全控制,缓存,事务管理等。

 

AOP提供了在软件组件的行为间切割关注点的能力,这种切割从概念上增加了模块化。通过AOP,我们可以将这些横切关注点抽象化,并模块化为单独的功能,从而降低了代码重复和提高了代码的可维护性。也便于我们在不影响主要功能代码的基础上增加或删除一些功能。

 

Spring中的AOP概念:

 

在Spring中,AOP是通过定义切面实现的。切面(Aspect)是用于实现横切关注点的模块,其内部封装了一些通知(Advice)和切点(Pointcut)。

 
  • Advice(通知):是切面的一部分,是切面必须完成的工作,例如,在方法调用前后打印日志。
  • Pointcut(切点):是切面应用于何处的定义,例如,我们可以定义一个切点来匹配所有具有特定注解的方法。
 

Spring提供了五种类型的Advice:

 
  1. Before advice:在某连接点(对应于JointPoint)之前执行的Advice
  2. After returning advice:在某连接点正常完成之后执行的Advice
  3. After throwing advice:在方法抛出异常之后执行的Advice
  4. After (finally) advice:无论一个连接点退出的方式如何,都要执行的advice
  5. Around advice:围绕一个连接点执行的advice,可以在方法调用前后自定义一些操作。
 

Spring AOP支持AspectJ注解,并提供了对AspectJ Pointcut表达式语言的支持,使得我们可以通过表达式更灵活地定义切点。

II. Spring AOP的核心组件

Aspect(切面)

 

相关文章:

  • Git 学习笔记
  • 国内市场有哪些创意交互性强,重视用户体验的APP/小程序?
  • 821. 字符的最短距离 - 力扣
  • SSL函数01-数组函数Array Functions
  • MySQL——内置函数
  • [STM32-HAL库]ADC采集-DMA中断采集-平均值滤波-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6
  • 吃透那些面试:MongoDb的索引
  • 【MATLAB源码-第84期】基于matlab的802.11a标准的OFDM系统误码仿真对比QPSK,16QAM。
  • Linux网络编程:传输层协议|UDP
  • yolox-何为EMA?
  • JAVA生成随机姓名(小白也能看得懂)
  • IDEA2023.2单击Setting提示报错:Cannot get children Easy Code
  • 【论文解读】A Progress Report: The Alliance for Open Media and the AV1 Codec
  • odoo16版本的render变更
  • 学习Uni-app开发小程序Day23
  • 2017前端实习生面试总结
  • ES6之路之模块详解
  • Git同步原始仓库到Fork仓库中
  • JAVA之继承和多态
  • Otto开发初探——微服务依赖管理新利器
  • Python实现BT种子转化为磁力链接【实战】
  • spring学习第二天
  • vuex 学习笔记 01
  • 物联网链路协议
  • 函数计算新功能-----支持C#函数
  • ​【已解决】npm install​卡主不动的情况
  • ​TypeScript都不会用,也敢说会前端?
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #在 README.md 中生成项目目录结构
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $(selector).each()和$.each()的区别
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (回溯) LeetCode 77. 组合
  • (六)Hibernate的二级缓存
  • (生成器)yield与(迭代器)generator
  • (一)面试需要掌握的技巧
  • (转)Windows2003安全设置/维护
  • .NET 4.0中的泛型协变和反变
  • .Net 8.0 新的变化
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net6使用Sejil可视化日志
  • .NET是什么
  • .net网站发布-允许更新此预编译站点
  • .NET下的多线程编程—1-线程机制概述
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @Valid和@NotNull字段校验使用
  • @WebService和@WebMethod注解的用法
  • [ Linux ] Linux信号概述 信号的产生
  • [20171106]配置客户端连接注意.txt
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [Android Studio] 开发Java 程序