Spring-Day7

17.AOP

AOP意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

AOP在Spring中的作用

  • 横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志,安全,缓存,事务等等

  • 切面:横切关注点 被模块化 的特殊对象。即,它是一个类

  • 通知:切面必须要完成的工作。即,它是类中的一个方法

  • 目标:被通知对象

  • 代理:向目标对象应用通知之后创建的对象

  • 切入点:切面通知 执行的“地点”的定义

  • 连接点:与切入点匹配的执行点

使用AOP,需要导入一个依赖包

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

编写一个UserService

@Service
public class UserService {public void add() {System.out.println("添加用户");}public void delete() {System.out.println("删除用户");}public void update() {System.out.println("修改用户");}public void query() {System.out.println("查找用户");}
}

编写好LogAspect

@Aspect // 标记为了切面类
@Component // 必须声明为 Spring 的 bean
public class LogAspect {// 实现方法用时 切点表达式// 环绕通知@Around("execution(* com.example.demo.UserService.*(..) )")public void log(ProceedingJoinPoint proceedingJoinPoint) {// 记录方法用时long start = System.currentTimeMillis();// 执行具体的方法try{proceedingJoinPoint.proceed();} catch (Throwable e) {System.out.println("方法执行异常:" + e.getMessage());}long end = System.currentTimeMillis();
​System.out.println("方法用时:" + (start - end) + "ms");}
}

编写好启动类

@SpringBootTest (classes = C4AopApplicationTests.class)
@ComponentScan
class C4AopApplicationTests {
​@Testvoid contextLoads(@Autowired UserService userService) {userService.add();}
​
}

启动后成功完成添加用户等操作!

如何在Spring中创建一个所谓的切面? @Aspect + @Component + 通知 + 切点

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

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

相关文章

基于SSM的BBS社区论坛系统源码

1.项目介绍 系统角色&#xff1a;管理员、业主&#xff08;普通用户&#xff09;功能模块&#xff1a;管理员&#xff08;用户管理、二手置换管理、报修管理、缴费管理、公告管理&#xff09;、普通用户&#xff08;登录注册、二手置换、生活缴费、信息采集、报事报修&#xf…

python的安装环境Miniconda(Conda 命令管理依赖配置)

这一段时间&#xff0c;对AI大模型 有了兴趣就想研究一下。 在研究之前肯定要先把需要的编程技能掌握了。经过我查阅资料&#xff0c;今天就先学一下 python的 环境安装。 Node.js 包管理工具&#xff1a;npm 依赖配置文件&#xff1a;package.json 环境管理&#xff1a;nvm&am…

出租房管理系统有哪些?

出租房管理系统在现代房产租赁市场中发挥着至关重要的作用&#xff0c;其供应商众多&#xff0c;各具特色。以下是对易收租、寓小二、全房通、水滴管家以及悟空租房管理系统等供应商的详细介绍。 一、深圳合众致达科技有限公司的易收租 深圳合众致达科技有限公司是一家专注于…

【在Linux世界中追寻伟大的One Piece】Socket编程TCP

目录 1 -> TCP socket API 2 -> V1 -Echo Server 2.1 -> 测试多个连接的情况 1 -> TCP socket API socket()&#xff1a; socket()打开一个网络通讯端口&#xff0c;如果成功的话&#xff0c;就像open()一样返回一个文件描述符。应用程序可以像读写文件一样用r…

【spring】IOC与DI

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;程序猿的春天 一、IOC&#xff08;Inversion of Control&#xff09; 1、概念 IOC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;是一种设计原则&#xff0c;它将对象的控制权…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-16

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

​​​​​​​PHP类型比较

在php中符号分为两种&#xff0c;一种是&#xff0c;还是一种是 松散比较&#xff1a;使用两个等号 比较&#xff0c;只比较值&#xff0c;不比较类型。 严格比较&#xff1a;用三个等号 比较&#xff0c;除了比较值&#xff0c;也比较类型。 注意&#xff0c;当一个号时&…

Mysql、Dm8达梦数据库通过脚本导出指定库所有表的结构详情信息到

目录 前言二、Mysql三、达梦8 前言 在当今复杂多变的数据环境中&#xff0c;数据库作为信息存储与管理的核心&#xff0c;其重要性不言而喻。随着业务的不断拓展和深化&#xff0c;对于数据库表结构的理解与管理成为了确保数据一致性和准确性的关键。特别是在跨数据库系统的场…

yelp数据集上识别潜在的热门商家

yelp数据集是研究B2C业态的一个很好的数据集&#xff0c;要识别潜在的热门商家是一个多维度的分析过程&#xff0c;涉及用户行为、商家特征和社区结构等多个因素。从yelp数据集里我们可以挖掘到下面信息有助于识别热门商家 用户评分和评论分析 评分均值: 商家的平均评分是反映其…

文献阅读记录6-Toward computer-made artificial antibiotics

摘要 将合成生物学和计算生物学的概念结合起来&#xff0c;可能会产生比现有药物更不容易产生耐药性的抗生素&#xff0c;而且还能对抗耐药感染。事实上&#xff0c;计算机引导策略与大规模并行高通量实验方法相结合&#xff0c;代表了抗生素发现的新范式。耐多药微生物引起的…

【docker compose】docker compose的hello world

安装docker desktop后在终端使用以下命令&#xff0c;代表安装成功&#xff0c;并查看当前安装的版本 docker-compose --version示例docker-compose.yml文件 version: 3.8 # 指定 Docker Compose 文件的版本services:scau_jwc: # 定义一个名为 scau_jwc 的服务image: scau_…

PyTorch核心概念:从梯度、计算图到连续性的全面解析(二)

文章目录 pytorch中的Autograd计算图叶子张量 inplace操作PyTorch的两大特点动态图eager execution PyTorch中的Variable参考文献 pytorch中的Autograd pytorch提供了自动求导机制和对GPU的支持 了解自动求导背后的原理和规则&#xff1a;当使用pytorch中没有的loss function时…

dayseven-因果分析-图模型与结构因果模型

在数学上&#xff0c;​“图”(graph)是顶点&#xff08;vertex&#xff0c;也可以称为节点&#xff09;和边(edge)的集合&#xff0c;表示为图G(V,E)&#xff0c;其中V是节点的集合&#xff0c;E是边的集合&#xff0c;图中的节点之间通过边相连&#xff08;也可以不相连&…

今天强的可怕,AI文风写作再也不用写指令了

AI写作最有用的事情之一就是捕捉特定的写作风格&#xff0c;市面上写作工具模仿文风需要下达复杂的prompt&#xff0c;经过一大段精细的微调才能实现&#xff01; 而现在文思助手只要一个按钮就能输出一篇文风相似的文章&#xff01;超级简单&#xff0c;你再也不用为一大段一大…

Vue2中使用firefox的pdfjs进行文件文件流预览

文章目录 1.使用场景2. 使用方式1. npm 包下载,[点击查看](https://www.npmjs.com/package/pdfjs-dist)2. 官网下载1. 放到public文件夹下面2. 官网下载地址[点我,进入官网](https://github.com/mozilla/pdf.js/tags?afterv3.3.122) 3. 代码演示4. 图片预览5. 如果遇到跨域或者…

哪些因素会影响 DC/DC 转换电路快速测试的性能?-纳米软件

DC/DC 转换电路在现代电子设备中起着至关重要的作用&#xff0c;其性能的快速准确测试对于确保电子系统的可靠性和稳定性至关重要。然而&#xff0c;有许多因素会影响 DC/DC 转换电路快速测试的性能。 电路复杂性和参数多样性 单片 DC/DC 转换器由于功能模块和参数复杂性&…

解线性方程组(二)

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的&#xff1a;进一步熟练掌握用Jacobi迭代法和Gauss-Seidel法解线性方程组的算法&#xff0c;提高编程能力和解算线性方程组问题的实践技能。 实验内容&#xff1a; 1)取初值性x(0)(0,0,0,0)T, 精度要求ε…

跨境电商营销:Pinterest的5个便捷营销工具

Pinterest是消费者寻找创意灵感的首选平台之一&#xff0c;同时&#xff0c;根据Global Web Index的调查数据&#xff0c;人们使用Pinterest的首要原因是寻找新产品和品牌&#xff0c;这意味着用户在使用Pinterest时已经有消费意愿和倾向。 因此&#xff0c;让更多目标受众注意…

JAVA基础:多重循环、方法、递归 (习题笔记)

一&#xff0c;编码题 1.打印九九乘法表 import java.util.*;public class PanTi {public static void main(String[] args) {Scanner input new Scanner(System.in);for (int i 0; i < 9; i) {//i控制行数/* System.out.println("。\t。\t。\t。\t。\t。\t。\t。\…