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(切面)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C-数据结构-树状存储基本概念

‘’’ 树状存储基本概念 深度(层数) 度(子树个数) 叶子 孩子 兄弟 堂兄弟 二叉树: 满二叉树: 完全二叉树: 存储:顺序,链式 树的遍历:按层遍历&#xff0…

Kibana(一张图片胜过千万行日志)

Kibana(一张图片胜过千万行日志) Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。 你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。 你可以轻松地执行高级数据分析&a…

LangChain 0.2 - 基于 SQL 数据构建问答系统

本文翻译整理自:Build a Question/Answering system over SQL data https://python.langchain.com/v0.2/docs/tutorials/sql_qa/ 文章目录 一、项目说明⚠️ 安全说明⚠️架构 二、设置三、Chains1、将问题转换为 SQL查询2、执行 SQL查询3、回答问题 四、Agents1、S…

TiDB学习3:TiKV

目录 1. TiKV架构和作用 2. RocksDB 2.1 写入 2.2 查询 2.3 Column Families列簇 3. 分布式事务 3.1 事务流程 3.2 分布式事务流程 3.3 MVCC 4. Raft与Multi Raft 4.1 Raft日志复制 4.2 Raft Leader选举 5. TiKV- 读写 5.1 数据的写入 5.2 数据的读取ReadIndex …

夏日防晒笔记

1 防晒霜 使用方法:使用前上下摇晃瓶身4至5次,在距离肌肤10至15cm处均匀喷上。如在面部使用,请先喷在掌心再均匀涂抹于面部。排汗量较多时或擦拭肌肤后,请重复涂抹以确保防晒效果。卸除时使用普通洁肤产品洗净即可。

leetcode-主持人调度(二)-110

题目要求 思路 1.先将开始时间和结束时间拆分放到两个数组中进行排序 2.如果开始的时间小于结束时间,说明目前没有空闲的人,需要增加人,如果大于等于,说明有人刚结束了主持,可以进行新的主持了,变更到下一…

winform中通过PictureBox控件显示图像的代码

using System; using System.Drawing; using System.Windows.Forms; namespace DisplayImageExample { public partial class Form1 : Form { private PictureBox pictureBox1 new PictureBox(); public Form1(){InitializeComponent();// 初始化PictureBox控件pictureBox1.S…

驱动开发的分离与分层

1.概念 1.1.分层 分层就是将一个复杂的工作分成了多层, 分而做之,降低难度。在驱动里面,每一层只专注于自己的事情, 系统已经将其中的核心层和事件处理层写好了,我们只需要来写硬件相关的驱动层代码即可。可能驱动里面大家都不是很熟悉,比如…

ubuntu18.04 报错:fatal error: execution

一、问题描述 在ubuntu18.04上编译Faster-lio 报错&#xff1a; fatal error: execution: 没有那个文件或目录#include <execution> 二、解决方法 需要将g编译器更新到9.0 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install g…

深度学习-序列模型

深度学习-序列模型 1. 定义2. 应用领域3. 典型模型4. 技术细节5. 总结 序列模型是一种处理序列数据的机器学习模型&#xff0c;其输入和/或输出通常为序列形式的数据。以下是关于序列模型的详细解释&#xff1a; 1. 定义 序列模型是输入输出均为序列数据的模型&#xff0c;它…

【Django】开发个人博客系统【1】

使用Django开发个人博客系统&#xff0c;博客系统包括用户&#xff08;博主&#xff09;注册和登录、博主资料信息、图片墙功能、留言板功能、文章列表、文章正文内容和Admin后台系统。 1. 项目架构设计 下一步将上述设置写入Django的配置文件settings.py&#xff0c;当Django…

【区分vue2和vue3下的elementUI和elementUI Plus的container组件,介绍如何安装,属性,事件,方法等以及使用案例】

vue2下的Element UI与vue3下的Element Plus的container组件区分 一、Element UI (vue2) 1. 安装 使用npm进行安装&#xff1a; npm install element-ui --save2. Container组件介绍 Container组件用于布局的容器组件&#xff0c;方便快速搭建页面的基本结构。它包含了<…

R可视化:另类的柱状图

介绍 方格状态的柱状图 加载R包 knitr::opts_chunk$set(echo TRUE, message FALSE, warning FALSE) library(patternplot) library(png) library(ggplot2) library(gridExtra)rm(list ls()) options(stringsAsFactors F)导入数据 data <- read.csv(system.file(&qu…

【代码随想录——回溯算法——三周目】

1. 子集2 这题需要先进行排序&#xff0c;和候选人那题类似。防止出现重复的子集。 func subsetsWithDup(nums []int) [][]int {path : make([]int, 0)res : make([][]int, 0)sort.Ints(nums)var dfs func(nums []int, start int)dfs func(nums []int, start int) {res app…

保留两位小数不四舍五入,10000.55变成10000.54的坑

正解 function moneyFormat(num){ let money num "";//隐式转换为字符串和toString()效果一样//没有小数补齐这个0if(money.indexOf(".")"-1"){moneymoney".00";}else{//有小数截取前二位小数moneymoney.substring(0,money.inde…

多线程基本常识

多线程的状态 在Java中&#xff0c;一个线程的生命周期有以下几种状态&#xff1a; 新建&#xff08;New&#xff09;&#xff1a;当线程对象被创建时&#xff0c;线程处于新建状态。此时线程对象存在&#xff0c;但还没有调用start()方法启动线程。 运行&#xff08;Runnable…

逆向基础:软件手动脱壳技术入门

这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文&#xff0c;希望能给新学软件逆向和脱壳的童鞋们一点帮助。 1 一些概念 1.1 加壳 加壳的全称应该是可执行程序资源压缩&#xff0c;是保护文件的常用手段。加壳过的程序可以直接运行&#xff0c;但是不能查看源代码…

基于多源数据的微服务系统失败测试用例诊断

简介 本文介绍由南开大学、华为云及清华大学共同合作的论文:基于多源数据的微服务系统失败测试用例诊断。该论文已被FSE 2024&#xff08;The ACM International Conference on the Foundations of Software Engineering&#xff09; 会议录用&#xff0c;论文标题为: Fault D…

【MySQL】库的操作+表的操作

库的操作表的操作 1.库的操作1.1创建数据库1.2删除数据库1.3查找数据库1.4修改数据库1.5数据库备份和恢复1.6查看连接情况 2.库的操作2.1创建表2.2查看表结构2.3修改表2.4删除表 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; …

[数据集][目标检测]红外车辆检测数据集VOC+YOLO格式13979张类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;13979 标注数量(xml文件个数)&#xff1a;13979 标注数量(txt文件个数)&#xff1a;13979 标…