一文读懂Spring AOP的工作原理和机制(面试经)

news2025/1/13 13:50:57

导览

  • 前言
  • AOP(Aspect-Oriented Programming)必学必看
    • 1. 核心概念
    • 2. 主要原理
    • 3. 实践应用
      • 3.1 添加maven依赖
      • 3.2 定义切面Aspect
      • 3.3 定义Methods (join point) 切入点
  • 结语
  • 精彩回顾

前言

在上文中,博主介绍了Spring IoC的核心原理和用法,相信你可以通过文章中的内容学到了关键的知识点。本文同样介绍Spring的关键知识,是什么呢? AOP

作为与IoC同负盛名的武器,AOP展现了Spring另外一面风采,它促进了Spring各类插拔式开发的发展。
在这里插入图片描述

AOP(Aspect-Oriented Programming)必学必看

Aspect-Oriented Programming(AOP) complements Object-Oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects. (Such concerns are often termed crosscutting concerns in AOP literature.)

一句话总结:这是一种面向切面编程的一种技术。通过预编译(preload)和动态代理(running)实现程序功能的统一维护。AOP是OOP(面向对象编程)的延续,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行拆分和隔离,从而使得业务单元间的耦合度降低,提高程序的可重用性和开发效率。

接下来,我们一块看看AOP到底是什么。

1. 核心概念

名词解释
Aspect这是一个模块,其中包含一组提供交叉要求的API
Join point可以插入AOP切面的应用程序中的一个点(位置)
Advice这是在方法执行之前或之后要采取的实际操作
Pointcut这是一组应该执行Advice的一个或多个连接点
Target objectadvised object(建议对象),一种代理对象

上面这些“武器”,都在AOP各个方面体现到它们的作用,通过下图我们可以一览无余:
在这里插入图片描述

2. 主要原理

Spring AOP是一个基于代理的AOP框架。这意味着要实现目标对象的方面,需要创建该对象的代理。
如何实现代理?有两种方式:

  • JDK动态代理
    Spring AOP的首选方式。只要目标对象实现了一个接口,就会使用JDK动态代理。
  • CGLIB代理
    如果目标对象未实现接口,则可以使用CGLIB代理。

如果不理解,我们可以通过下图,发现两种代理方式的异同:

在这里插入图片描述

3. 实践应用

掌握了核心概念和主要原理之后,可以实践一番,且看且行。

3.1 添加maven依赖

POM添加AOP依赖,请注意更新为最新版本号,以下仅为示例:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	KartifactId>spring-context-support
</artifactId>
	<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aop</artifactId>
	<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjrt</artifactId>
	<version>1.6.11</version>
</dependency>
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
	<version>1.6.11</version>
</dependency>

3.2 定义切面Aspect

Write aspect class annotated with @Aspect annotation and write point-cut expressions to match joint-point methods.

一句话总结:通过在class上添加注解@Aspect ,即可将其转换为AOP中的一个切面(Aspect)。在该切面中,需要通过point-cut 表达式匹配连接点(参考核心概念中的示意图)。
代码示意:

@Aspect
public class EmployeeAspect {
	@Before("execution(*EmployeeManager.getEmployee(..))") // point-cut expression
	public void logBeforeV1(JoinPoint joinPoint) {
		System.out.println("EmployeeAspect.logBeforev1():" + joinPoint.getSignature() - getName());
	}
}

3.3 定义Methods (join point) 切入点

Write methods on which you want to execute advices and those match with point-cut expressions。

一句话总结:创建匹配point-cut 表达式的连接点,即要执行的函数或方法。
代码示意:

@Component
public class EmployeeManager{
	public EmployeeDTO getEmployee(Integer employeeId) {
		System.out.println("Method getEmployee() called");
		return new EmployeeDTO();
	}
}

在该示例中,logBeforeV1() 先于getEmployeeById()方法执行(@Before),因为它匹配point-cut表达式。


结语

本文主要介绍了Spring AOP的核心原理和实现方法,相关知识是同样是面试必答环节,好好研习一下,可助你通关哦。

走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~

精彩回顾

一文读懂SpringIoC的工作原理和机制(面试经)
一文读懂SpringMVC的工作原理
Springboot中基于X509完成SSL检验的原理与实践
基于springboot+enum配置化实践


在这里插入图片描述

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

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

相关文章

Aria2Cloudreve任意文件写入到RCE

什么是Aria2 Aria2 是一个轻量级的命令行下载工具&#xff0c;支持多种下载协议&#xff0c;如 HTTP、FTP、SFTP、BitTorrent 和 Metalink。它以其强大的多源下载能力而著称&#xff0c;可以同时从多个服务器或对等节点下载文件&#xff0c;加快下载速度。Aria2 占用资源少&am…

UE4 材质学习笔记05(凹凸偏移和视差映射/纹理压缩设置)

一.凹凸偏移和视差映射 1.偏移映射 这需要一个高度图并且它的分辨率很低&#xff0c;只有256*256&#xff0c;事实上&#xff0c;如果高度图的分辨率比较低并且有点模糊&#xff0c;效果反而会更好 然后将高度图输出到BumpOffset节点的height插槽中&#xff0c; 之后利用得到…

JVM 内存模型与垃圾回收过程详解

JVM 内存模型与垃圾回收过程详解 文章目录 JVM 内存模型与垃圾回收过程详解1. JVM内存分区1.1 具体分区1.2 JVM内存分区的必要性 2. 垃圾回收2.1 CMS垃圾回收器2.2 G1垃圾回收器2.3 JVM垃圾回收从新生代到老年代 1. JVM内存分区 1.1 具体分区 Java虚拟机&#xff08;JVM&#…

YOLOv10改进策略【注意力机制篇】| 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

一、本文介绍 本文记录的是基于蒙特卡罗注意力&#xff08;MCAttn&#xff09;模块的YOLOv10目标检测改进方法研究。利用蒙特卡罗注意力&#xff08;MCAttn&#xff09;模块提高RepNCSPELAN4模块的跨尺度特征提取能力&#xff0c;使模型能够更好地传递和融合提取的多尺度特征&…

<Rust>iced库(0.13.1)学习之部件(三十二):使用markdown部件来编辑md文档

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的第三十二篇,主要介绍一…

Matlab实现海鸥优化算法优化回声状态网络模型 (SOA-ESN)(附源码)

目录 1.内容介绍 2部分代码 3.实验结果 4.内容获取 1内容介绍 海鸥优化算法&#xff08;Seagull Optimization Algorithm, SOA&#xff09;是一种受海鸥觅食和飞行行为启发的群体智能优化算法。SOA通过模拟海鸥在空中搜寻食物、聚集和分散的行为模式&#xff0c;来探索和开发…

免费ppt模板从哪找?一文看这里

国庆假期结束&#xff0c;回工作岗位的你是不是正忙着准备汇报材料&#xff1f;别担心&#xff0c;一份精美的PPT能为你的工作汇报增色不少。 而一个吸引人的PPT背景模板&#xff0c;更是能让你的演示脱颖而出。 为了帮助你们快速找到高质量免费ppt模板背景&#xff0c;以下特…

C++:string(题目篇)

文章目录 前言一、字符串相加二、仅仅反转字母三、字符串中的第一个唯一字符四、字符串最后一个单词的长度五、检查字符串是否是回文六、反转字符串 II七、反转字符串中的单词 III八、字符串相乘总结 前言 学习了string后&#xff0c;我们来学习对应的习题。 一、字符串相加 …

SWIFT Payment

SWIFT stands for Society for Worldwide Interbank Financial Telecommunication SWIFT——环球银行金融电信协会 SWIFT Payment Useful Link ISO 20022https://www.iso20022.org/https://www.swift.com/standards/iso-20022MT and MX Equivalence Tableshttps://www2.swift…

Python验证码识别——前处理

目前不少系统的验证码做得越来越复杂&#xff0c;人眼都难以识别&#xff0c;尤其是QQ之类的验证码&#xff0c;想要识别&#xff0c;太难了。 现在有这样一个验证码&#xff1a; 一般的验证码识别&#xff0c;都是先进行前处理&#xff0c;然后分割&#xff0c;在进行识别。这…

Keysight 是德 EXR608A 实时示波器

Keysight 是德EXR608A 实时示波器 EXR608A、EXR604A EXR408A、EXR404A EXR258A、EXR254A EXR208A、EXR204A EXR108A、EXR104A EXR058A、EXR054A EXR608A Infiniium EXR 系列示波器&#xff1a;6 GHz&#xff0c;8 通道 全部 8 个通道均可提供 6 GHz 的带宽&#xff0c;…

NVLink 和 NVLink Switch

高速、多 GPU 通信的基础模组,助力将大型数据集更快地输入模型并在 GPU 之间快速交换数据。 文章目录 前言一、简介二、NVLink 性能三、NVLink Switch1. 通过 NVLink 通信提高 GPU 吞吐量2. NVIDIA NVLink 交换机四、NVLink Switch规格1. 通过完全连接实现非凡性能2. 功能强大…

智慧出行:数字孪生三维可视化大屏交通管控系统

智慧出行已成为现代城市发展的重要支柱&#xff0c;数字孪生技术在交通领域的应用不断深化。结合三维可视化技术&#xff0c;打造功能强大的大屏交通管控系统&#xff0c;将对城市交通管理带来巨大变革。该系统通过实时监测和数据分析&#xff0c;提供精准的交通状况显示和预测…

湖南(消费者调研)源点咨询 市场调研中关于定性调研的释义

湖南&#xff08;市场洞察&#xff09;源点咨询认为&#xff1a;定性调研是有关大量、详细信息的描述、领会和见解&#xff0c;而不仅仅是一种测量。它不像定量调研那么肤浅&#xff0c;它能提供更多有效的数据。定性调研旨在透过表面现象&#xff0c;超越所谓的"首要&quo…

速度白嫖:Minimax海螺上线图生视频功能

一、什么是Minimax海螺 网址&#xff1a;https://hailuoai.video/ Minimax海螺是一款创新的内容创作工具&#xff0c;专注于将静态图像转化为动态视频。它利用先进的图像处理与生成算法&#xff0c;帮助用户将普通图片迅速转变为引人入胜的短视频&#xff0c;适合社交媒体、…

Java | Leetcode java题解之第458题可怜的小猪

题目&#xff1a; 题解&#xff1a; class Solution {public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {if (buckets 1) {return 0;}int[][] combinations new int[buckets 1][buckets 1];combinations[0][0] 1;int iterations minutesToTest /…

矿井人员数据集,用于目标检测,深度学习,采用txt打标签,即yolo格式,也有原文件可以自己转换。总共3500张图片的数据量,划分给训练集2446张,

矿井人员数据集&#xff0c;用于目标检测&#xff0c;深度学习&#xff0c;采用txt打标签&#xff0c;即yolo格式&#xff0c;也有原文件可以自己转换。总共3500张图片的数据量&#xff0c;划分给训练集2446张&#xff1a; ### 矿井人员数据集用于目标检测的详细说明 #### 1. …

尚硅谷javaSpring

尚硅谷课件: 分类&#xff1a;尚硅谷Spring6教程 - Lixx Blog - 李晓旭的博客 简介 Java Spring 是一个开源的、全面的企业级应用开发框架&#xff0c;旨在简化企业级应用的开发。Spring 框架最初由 Rod Johnson 在 2002 年发布&#xff0c;并随着时间的推移&#xff0c;它已…

Linux系统和数据库常用的命令2

Linux系统和数据库常用的命令2 1、两台Linux机器ssh免密登录 client端登录server端需要免密&#xff0c;只需把公钥发送到server就可&#xff0c;会在server端生成一个authorized_keys文件 # 108机器上[rootclient ~]# ssh-keygen -t rsa // 非对称算法 Generating public/…

大学生就业招聘:Spring Boot系统的设计与实践

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息&#xff0c;可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…