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

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

导览

  • 前言
  • 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 expressionpublic 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.mrgr.cn/news/46177.html

相关文章:

  • 外包干了3年,技术退步太明显了。。。。。
  • 五十三、架构设计经验与技巧(风险管理)
  • 数字化转型实践中TOGAF如何推动企业实现数字化转型从理论到实践的全新路径
  • 图神经网络(GNNs):原理与应用深入解析
  • JAVA无人值守共享娱乐棋牌室系统源码
  • DS1302时钟模块(STM32)
  • Polars DataFrame 行和列选择指南
  • word页面为黑色的调整方式
  • PCL 估计点云的VFH特征
  • 源代码加密怎么做?企业常用十款源代码加密软件排行榜
  • 服装生产管理:SpringBoot技术实现
  • ABC374
  • 【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段
  • 硬盘坏道怎么修复?教程分享!
  • YOLO11涨点优化:blcok优化 | ECVBlock即插即用的多尺度融合模块,助力小目标涨点 | 顶刊TIP 2023 CFPNet
  • 高级Python开发工程师的面试备考指南
  • 解决:由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开.请跟服务器管理员联系
  • RISC-V架构CPU的微架构设计分析
  • 宝兰德加入中国交通运输协会信息专业委员会,携手共绘交通行业信息化新篇章
  • STM32(十八):SPI通信