spring框架之AOP模块,附带通知类型-----详细介绍

news2024/11/17 7:54:32

一,AOP简介

     是Spring框架中的一个重要模块,它提供了一种通过面向切面编程的方式来实现横切关注点的模块化的方法。AOP可以将应用程序的核心业务逻辑与横切关注点(如日志记录、事务管理、安全性等)分离开来,从而提高代码的可维护性和可重用性。

简单来说:通过动态代理技术可以在目标对象的方法的执行前、执行后以及抛出异常时织入切面逻辑

比如:书籍的增删改,本身只需要完成增删改的功能即可,这是如果需要添加日志功能,那么需要在原有的代码基础上,去修改添加日志功能,受牵连的方法就三个(add/edit/del)了

1.1 核心概念!(专业术语)

1.1.1 切面(Aspect):

    切面是一个模块,用于封装横切关注点的行为。它由切入点和切面逻辑组成。

1.1.2 切入点(Pointcut):

    切入点定义了在哪些连接点上织入切面逻辑。连接点可以是方法的执行、异常的抛出等。

1.1.3 通知(Advice):

     通知是切面在特定切入点上执行的动作。Spring AOP提供了四种类型的通知:前置通知      (Before)、后置通知(After)、返回通知(After-returning)和异常通知(After-throwing)  

1.1.4 织入(Weaving):

  织入是将切面应用到目标对象并创建代理对象的过程。织入可以通过编译期间的编译期织入、类加载期织入或运行期织入来实现。

   总而言之,Spring AOP提供了一种有效的方式来实现横切关注点的模块化。它能够改善代码的可维护性和可重用性,简化开发过程,并促进松耦合的设计

二,通知(7种)

为了让大家更能理解

普通spring-Config ioc实列:

定义一个接口类一个实现类,定义两个方法购书,发表评论方法

接口类 :

实现类:实现接口类方法

需要一个异常类,以便后续抛异常处理

 接下来就是spring ioc的配置,如果没有spring Config文件。那就是pom.xml文件没有配置好且配置的时候需要联网!

 spring Config 配置

运行结果

 2.1 前置通知

 根据上面实列来进行前置通知

 在目标方法执行之前执行的通知。前置通知可以访问和修改方法的参数。

 定义一个类并继承MethodBeforeAdvice 该所被继承的类是前置通知的类 

spring Config Ioc的配置

测试结果

2.2 后置通知

在目标方法执行之后(无论是否发生异常)执行的通知。后置通知不能访问方法的返回值

 定义一个类并继承AfterReturningAdvice 该所被继承的类是后置通知的类 

spring Config Ioc的配置:

运行结果 

2.3 环绕通知

 环绕通知是最强大和最灵活的通知类型。它将包围目标方法的执行,可以在方法执行前后自定义处理逻辑。环绕通知必须显式地决定是否继续执行目标方法

 定义一个类并继承MethodInterceptor 该所被继承的类是环绕通知的类 

spring Config Ioc的配置:

运行结果:

 2.4 异常通知

在目标方法抛出异常后执行的通知。异常通知可以访问抛出的异常信息,并在必要时处理异常

 定义一个类并继承ThrowsAdvice 该所被继承的类是异常通知的类 

spring Config ioc文件

运行结果

2.5 过滤通知

在目标方法顺利执行并返回结果后执行的通知。返回通知可以访问并修改方法的返回值。

 spring Config ioc文件配置即可

运行结果:

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

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

相关文章

6G 特点及表现

6G R&D Vision: Requirements and Candidate Technologies 5G已经提出来了大移动带宽,低时延和大规模机器互联,在这个基础上,6G加上了高可靠性,高定位精度和高智能化。 6G的主要候选技术,包括(子) THz 通信&#x…

学校如何公布录取情况表?这个不用技术的方法,小白老师都能轻松制作

作为一名教师,我深切了解学生和家长们对录取情况的关注和重视。为了满足他们的需求,我们学校一直致力于改进公布录取情况的方式和效果。在本篇文章中,我将向您介绍我们学校独特的录取查询系统,并分享我们选择这种方式的原因。 我…

ES基础及面试题

1. 什么是ES ES是一种开源的分布式搜索引擎,可以实现快速存储、搜索、分析大量数据。支持结构化查询和全文检索等多种方式 2. ES的实际用途 1. 全文搜索和信息检索 2. 日志分析,例如埋点分析 3. 监控和指标分析,网络流量,服务器…

C++11并发与多线程笔记(4) 创建多个线程、数据共享问题分析、案例代码

C11并发与多线程笔记&#xff08;4&#xff09; 创建多个线程、数据共享问题分析、案例代码 1、创建和等待多个线程2、数据共享问题分析2.1 只读的数据2.2 有读有写2.3 其他特例 3、共享数据的保护案例代码 1、创建和等待多个线程 #include<iostream> #include<threa…

Scada和lloT有什么区别?

人们经常混淆SCADA&#xff08;监督控制和数据采集&#xff09;和IIoT&#xff08;工业物联网&#xff09;。虽然SCADA系统已经存在多年&#xff0c;但IIoT是一种相对较新的技术&#xff0c;由于其能够收集和分析来自各种设备的大量数据而越来越受欢迎。SCADA和IIoT都用于提高工…

tomcat源码修改与编译

1、获取源码 从github下载其源码&#xff1a;https://github.com/apache/tomcat 2、选择版本 切换到对应版本&#xff08;直接用相对应的Git tag即可&#xff09;&#xff1a; git checkout 9.0.793、修改源代码&#xff0c;并且生成补丁 这里我们以修改去掉新版本的ws的检…

Docker网络与Cgroup硬件资源占用控制

目录 1.dockers的网络模式 1.1 获取容器的进程号 1.2 docker网络模式的特性 1.3 host主机模式 1.4 container模式 1.5 none模式 1.6 bridge 桥接模式 1.6 容器的自定义网络 &#xff08;1&#xff09;未创建自定义网络时&#xff0c;创建指定IP容器的测试 &#xff0…

VBA技术资料MF44:VBA_把数据从剪贴板粘贴到Excel

【分享成果&#xff0c;随喜正能量】人皆知以食愈饥&#xff0c;莫知以学愈愚,生命中所有的不期而遇都是你努力的惊喜.人越纯粹&#xff0c;就越能感受到美。大江、大河、大海、大山、大自然&#xff0c;这些风景从来都不会受“属于谁”的污染&#xff0c;人人都感受到它们的美…

来自句子转换器:转换器和池化组件

一、说明 转换器和池化组件&#xff0c;它们来自 Bert 在 SentenceTransformer 对象中预先训练的模型。 在我之前的文章中&#xff0c;我用拥抱面转换器介绍了预训练模型来计算句子之间的余弦相似性分数。在这篇文章中&#xff0c;我们将深入研究变压器模型的参数。句子转换器对…

Unity 编辑器资源导入处理函数 OnPreprocessTexture:深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPreprocessTexture 用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;我们可以使用编辑器资源导入处理函数&#xff08;OnPreprocessTexture&#xff09;来自定义处理纹理资源的导入过程。这个函数是继承自AssetPostprocessor类的&#x…

.NET Core6.0使用NPOI导入导出Excel

一、使用NPOI导出Excel //引入NPOI包 HTML <input type"button" class"layui-btn layui-btn-blue2 layui-btn-sm" id"ExportExcel" onclick"ExportExcel()" value"导出" />JS //导出Excelfunction ExportExcel() {…

微信小程序OCR插件,实现身份证、行驶证、银行卡、营业执照和驾驶证等识别

随着科技的不断发展&#xff0c;图片识别技术已经成为了当下移动互联网中的热点话题。而基于微信小程序和 OCR 插件的图文识别方案&#xff0c;更是成为了越来越多小程序开发者关注和研究的问题。本文中&#xff0c;我将为大家介绍微信小程序 OCR 插件&#xff0c;帮助大家实现…

并发编程系列-分而治之思想Forkjoin

我们介绍过一些有关并发编程的工具和概念&#xff0c;包括线程池、Future、CompletableFuture和CompletionService。如果仔细观察&#xff0c;你会发现这些工具实际上是帮助我们从任务的角度来解决并发问题的&#xff0c;而不是让我们陷入线程之间如何协作的繁琐细节&#xff0…

Linux学习之基本指令一

在学习Linux下的基本指令之前首先大家要知道Linux下一切皆目录&#xff0c;我们的操作基本上也都是对目录的操作&#xff0c;这里我们可以联想我们是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;类比学习更容易理解。 目录 01.ls指令 02. pwd命令 0…

Android Ble蓝牙App(六)请求MTU与显示设备信息

前言 在上一篇文章中已经了解了数据操作的方式&#xff0c;而数据交互的字节长度取决于我们手机与蓝牙设备的最大支持长度。 目录 Ble蓝牙App&#xff08;一&#xff09;扫描Ble蓝牙App&#xff08;二&#xff09;连接与发现服务Ble蓝牙App&#xff08;三&#xff09;特性和属…

财报解读:多元化布局,亲亲食品欲摘“果冻之王”头衔?

提及亲亲食品&#xff0c;大多数消费者的印象是其果冻、虾条等产品&#xff0c;而随着消费升级、休闲零食行业竞争的加剧&#xff0c;亲亲食品近年来也想“多条腿走路”&#xff0c;持续进行着产品创新。 不过&#xff0c;在市场看来&#xff0c;承载其转型愿景的新品并未带来…

ORB-SLAM2学习笔记8之特征点提取、生成描述子的ORBextractor

文章目录 0 引言1 特征点提取1.1 提取流程1.2 ORBextractor.cc1.2.1 成员函数1.2.2 成员变量 1.3 构建图像金字塔1.3.1 为什么要构建图像金字塔1.3.2 金字塔参数设置 1.4 提取ORB特征点1.4.1 Fast角点检测1.4.2 特征点提取流程1.4.3 八叉树筛选及非极大值抑制 2 描述子生成2.1 …

【数据集】GRNWRZ V2.0(全球河流网络和相应的水资源分区)介绍及下载

数据介绍 论文&#xff1a;J2022-A data set of global river networks and corresponding water resources zones divisions v2 论文下载地址 GRNWRZV1.0由严登华教授&#xff08;中国水利水电科学研究院&#xff09;团队开发&#xff0c;以全球90mDEM数据为基础&#xff0c;结…

SpringBoot-Mybatis 入门(数据库增删改查)

创建SpringBoot-Mybatis项目 创建新项目&#xff0c;注意Type要选择Maven Spring Boot的版本没啥硬性要求&#xff0c;一般开开发环境 依赖必选MySQL Driver、MyBatis Framework&#xff1b; 选Spring Web是为了辅助未来的web开发&#xff1b; Lombok是个人开发习惯。 配置 …

【C++精华铺】8.C++模板初阶

目录 1. 泛型编程 2. 函数模板 2.1 函数模板的概念及格式 2.2 函数模板的原理 2.3 模板的实例化 2.4 模板参数的匹配原则 3. 类模板 3.1 类模板格式 3.2 类模板的实例化 1. 泛型编程 什么是泛型编程&#xff1f;泛型编程是避免使用某种具体类型而去使用某种通用类型来进行…