Java必考面试题,谈谈你对 Spring AOP 的理解

大家好,我是伍六七。

今天我们来学习 Spring 框架中最重要的概念之一:AOP。

这是一个 Java 程序员必考的面试题,大家好好理解。我们开始正文。

AOP 的概念

Spring AOP 是 Java 程序员们面试经常被问到的一个问题,但 AOP(Aspect-Oriented Programming)其实是一种编程范式,用于在程序运行期间将横切关注点(Cross-cutting Concerns)与核心业务逻辑分离开来,并不只是在 Spring 中使用。

图片来源于网络

横切关注点是指那些在应用程序中多个模块中都存在的功能,如日志记录、事务管理、安全性等。AOP 通过将这些横切关注点抽象为切面(Aspect),并将其与核心业务逻辑进行解耦,从而提高代码的可维护性和可重用性。

AOP 的原理

AOP 的原理是通过动态代理或字节码增强技术,在运行时将切面织入到目标对象的方法中。

在 Spring 框架中,AOP 的实现主要依赖于动态代理。Spring AOP 提供了两种类型的代理:基于接口的代理(JDK 动态代理)和基于类的代理(CGLIB 代理)。

基于接口的代理要求目标对象实现接口,而基于类的代理则通过继承目标对象来创建代理对象。

Spring AOP 有 7 个概念,你必须知道

图片来源于网络

  • 切面(Aspect):切面是一个横跨多个类的关注点的模块化。在企业级 Java 应用程序中,事务管理是一个典型的横切关注点。在 Spring AOP 中,切面可以使用普通类(基于模式的方法)或带有@Aspect 注解的普通类(基于@AspectJ 风格)来实现。

  • 连接点(Join point):程序执行过程中的一个点,例如方法的执行或异常的处理。在 Spring AOP 中,连接点始终表示方法的执行。

  • 通知(Advice):切面在特定连接点上采取的操作。不同类型的通知包括「around」、「before」和「after」通知。许多 AOP 框架,包括 Spring,将通知建模为拦截器,维护着围绕连接点的拦截器链。

  • 切点(Pointcut):用于匹配连接点的谓词。通知与切点表达式相关联,并在与切点匹配的任何连接点上运行(例如,执行具有特定名称的方法)。连接点的概念与切点表达式的匹配在 AOP 中是核心的,Spring 默认使用 AspectJ 切点表达式语言。

  • 目标对象(Target object):被一个或多个切面所通知的对象。也称为被通知对象。由于 Spring AOP 是使用运行时代理实现的,因此该对象将始终是一个代理对象。

  • AOP 代理(AOP proxy):AOP 框架创建的对象,用于实现切面的契约(例如,通知方法的执行等)。在 Spring 框架中,AOP 代理可以是 JDK 动态代理或 CGLIB 代理。

  • 织入(Weaving):将切面与其他应用程序类型或对象链接起来,创建一个被通知的对象。这可以在编译时(例如使用 AspectJ 编译器)、加载时或运行时进行。Spring AOP 和其他纯 Java AOP 框架一样,会在运行时进行织入。

AOP 的 8 种使用场景

  • 日志记录:通过 AOP 可以在方法执行前后记录日志,方便跟踪和调试应用程序。
  • 事务管理:AOP 可以在方法执行前后进行事务的开启、提交或回滚,简化了事务管理的代码。
  • 安全性控制:通过 AOP 可以在方法执行前进行权限验证,确保只有具有相应权限的用户才能访问敏感数据或执行敏感操作。
  • 性能监控:AOP 可以在方法执行前后进行性能监控,如记录方法的执行时间、调用次数等,用于性能优化和瓶颈分析。
  • 异常处理:AOP 可以在方法执行过程中捕获异常,并进行统一的异常处理和错误日志记录。
  • 缓存管理:AOP 可以在方法执行前后进行缓存的读取和更新,提高系统的响应速度和性能。
  • 验证和校验:AOP 可以在方法执行前进行参数的验证和校验,确保输入的数据符合要求。
  • 消息通知:AOP 可以在方法执行前后发送消息通知,如发送邮件、短信等。

一句话总结

AOP 通过将横切关注点与核心业务逻辑分离,提高了代码的可维护性和可重用性。


关注我,送你全套我整理的 Java 岗位面试资料。这是我自己之前整理的面试题,靠着这份面试题,我从 30 人的小公司,进了 2000 人+的央企子公司,之后又进了互联网大厂。

一份让我进大厂&央企的面试题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高等数学教材啃书汇总重难点(三)微分中值定理与导数的应用

本章节包含多个知识点,一些列微分中值定理是考研证明题的重头戏,而洛必达和泰勒展开则是方法论的天花板难度,虽然对于小题的考察难度较低,整体上仍需重点复习 首先是考研大纲包含的内容: 1.理解并会用罗尔(Rolle)定理、…

万字详解Java的三大特性:封装 | 继承 | 多态

前言:面向对象程序设计的三大特征就是:封装,继承,多态。在前文介绍了类和对象后,我们就可以继而学习什么是封装,怎么用类的子类来实现继承和多态 目录 一.面向对象的特性 1.封装性 2.继承性 3.多态性…

Find My行李箱|苹果Find My技术与行李箱结合,智能防丢,全球定位

行李箱,亦称旅行箱、拉杆箱。是出门时所携带用以放置物品的箱子,它是行李的其中一种类型。通常行李箱是用来放置旅途上所需要的衣物、个人护理用品、纪念品和贵重物品。旅游出差我们离不开行李箱,可是一旦行李箱丢失将造成很大不便&#xff0…

蓝桥杯双周赛算法心得——串门(双链表数组+双dfs)

大家好,我是晴天学长,树和dfs的结合,其邻接表的存图方法也很重要。需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .串门 2) .算法思路 串门(怎么存图很关键&#xf…

基于springboot学生心理咨询评估系统的设计与实现 全套代码 全套文档 附带视频知道教程

springboot学生心理咨询评估系统,springboot vue mysql (毕业论文10784字以上,共30页,程序代码,MySQL数据库) 代码下载: 链接:https://pan.baidu.com/s/1MjiwuWdkVHFQ4toPP1vVrA?pwd4eck 提取码:4eck 【运行环境】 IDEA, JDK1.8, Mysql, Node, Vue …

阿里云服务器ECS经济型e实例和u1有什么区别?

阿里云服务器ECS经济型e实例和通用算力型u1实例有什么区别?如何选择?ECS经济型e实例是共享型云服务器,通用算力型u实例是企业级独享型云服务器,e实例性价比高,现在2核2G3M带宽一年99元,云服务器u1价格相对要…

浅析SR隧道路径批量构造方法

为什么要仿真PCE LSP下发隧道路径? 在大型的多区域网络中,路径计算非常复杂。在某些场景下,为了完成路径计算,需要在控制器上部署特殊的计算组件,并需要不同区域中的节点之间协作。这使得网元在进行路径计算时效率低&…

直播实时数仓基于DataLeap开放平台在发布管控场景的业务实践

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 背景 业务背景 随着字节业务的高速增长,业务场景越来越丰富,业务基于数据做的决策也越来越多,对数据的时效性要求也越来越高。…

layui table合计 totalRow 保留4位小数\ 异步请求数据的表格 新增行之后 如何更新数据

layui table合计 totalRow 保留4位小数: 例: totalRowMethod:(column: any, dataSource: any[]) > { let total 0; dataSource.forEach((item) > { total total Number(item[column.key]); …

Vite依赖预构建

本文使用的包管理工具是 npm 开发工具是 vscode 本文作为对 vite的了解性内容即可,实际开发中并不会做太多的工作 依赖预构建干了啥 首先vite会找到对应的依赖, 然后调用 esbuild(对js语法进行处理的一个库), 将其他规范的代码转换成 esmodu…

Web前端—CSS高级(定位、高级技巧、CSS修饰属性、综合案例:购物网站轮播图)

版本说明 当前版本号[20231108]。 版本修改说明20231107初版20231108对知识点(圆点)进行补充 目录 文章目录 版本说明目录day08-CSS高级01-定位相对定位绝对定位定位居中固定定位堆叠层级 z-index定位总结 02-高级技巧CSS精灵案例-京东服务HTML结构CS…

API是什么?解密API背后的奥秘

API,全称Application Programming Interface,是一种用于不同应用程序间通信的接口,它允许不同的应用程序之间交换数据和功能。API可以理解为应用程序提供给其他应用程序或开发者的接口,通过这个接口,其他应用程序或开发…

将 Ordinals 与比特币智能合约集成:第 4 部分

控制 BSV-20 代币的分配 在上一篇文章中,我们展示了智能合约可以在铸造后控制 BSV-20 代币的转移。 今天,我们演示如何控制此类代币的分发/发行。 无Tick模式 BSV-20 在 V2 中引入了无Tick模式,并采用了与 V1 不同的方法。 部署 (Deploy) …

openinstall携手途虎养车,赋能汽车服务数字化

近日,openinstall与中国领先的一站式汽车服务平台途虎养车再次续约,双方将开启第三年合作。过去两年,途虎在建设线上线下一体化数字平台的过程中,深度结合openinstall传参归因与渠道统计技术,打造出了一套高效的渠道来…

聚焦千兆光模块和万兆光模块的测试技术及设备

千兆光模块和万兆光模块的测试技术涉及多个方面,如光学性能测试、电气性能测试、动态性能测试、温度测试、环境和耐久性测试等。不同的测试技术可以验证不同的光模块的性能和稳定性,从而确保光模块在各种应用场景下的可靠性,下面将介绍一些常…

PSP - 蛋白质复合物结构预测 模版配对(Template Pair) 逻辑的特征分析

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134328447 在 蛋白质复合物结构预测 的过程中,模版 (Template) 起到重要作用,提供预测结果的关于三维结构的先验信息&…

Ubuntu2004字体不清晰,排查流程

昨天一早来发现平时用的Ubuntu2004物理机的字体变得很模糊,之前还是好好的,这里记录一下解决方案。 解决方案 通过显示器物理按键设置“自适应”解决,我的显示器是长城的,“自适应”按钮是右边从下往上数第二个。 排查流程 我先…

WordPress Modown 6.2付费下载资源/付费查看内容 wp主题模板+erphpdown11.7

模板简介: 自适应响应式设计,兼容主流浏览器 网格样式与瀑布流样式任意切换 内置SEO优化 自带与主题UI完美兼容搭配的erphpdown前端用户中心页面(此功能若单独找我们定制也需要几百) 收费付费下载资源、付费查看内容、付费观看…

GoLong的学习之路(二十一)进阶,语法之并发(go最重要的特点)(协程的主要用法)

并发编程在当前软件领域是一个非常重要的概念,随着CPU等硬件的发展,我们无一例外的想让我们的程序运行的快一点、再快一点。Go语言在语言层面天生支持并发,充分利用现代CPU的多核优势,这也是Go语言能够大范围流行的一个很重要的原…

【Delphi】Android 开发HTTP请求出错解决方案

目录 一、故障现象 二、原因及解决方案 一、故障现象 在android内建的WebBrowser浏览器中通过http访问一个网站(注意不是https),出现如下错误提示: 在使用ntfy的时候,访问http定义的服务器地址(注意不是…