面试:对Spring AOP的理解

1. 基本定义

Spring AOP 全称 Aspect-Oriented Programming(面向切面编程),它是 Spring 核心功能之一,不修改业务代码,就能给程序统一添加通用功能。
2. 核心思想

把日志、事务、权限校验、接口限流、异常统一处理等与业务无关的通用逻辑,抽离成独立模块,再通过 AOP 动态织入到目标方法中。

一句话总结:解耦通用功能与业务逻辑,让代码更干净、易维护。
3. 底层原理

Spring AOP 底层主要基于动态代理实现:

目标类有接口 → 使用 JDK 动态代理

目标类没有接口 → 使用 CGLIB 动态代理

它不修改源码,而是在运行时生成代理对象,在调用目标方法前后加入增强逻辑。
4. 核心术语(面试必说)

  • 切面 (Aspect):封装通用功能的类(如日志切面、事务切面)
  • 通知 (Advice):增强的具体逻辑(前置、后置、环绕、异常、最终通知)
  • 切点 (Pointcut):定义哪些方法需要被增强(匹配规则)
  • 连接点 (JoinPoint):可以被增强的方法
  • 织入 (Weaving):把增强逻辑添加到目标方法的过程
    5. 最常用的 5 种通知
  • @Before:方法执行前
  • @AfterReturning:方法正常返回后
  • @AfterThrowing:方法抛出异常后
  • @After:无论是否异常都会执行
  • @Around:最强大,可控制方法执行前后,甚至阻断执行
    6. 典型应用场景
  • 统一日志记录:方法入参、出参、耗时
  • 声明式事务:@Transactional 底层就是 AOP
  • 权限校验:接口调用前校验用户权限
  • 接口限流 / 防重复提交
  • 全局异常统一处理
  • 缓存控制
    7. 优点
  • 无侵入:不污染业务代码
  • 复用性强:一处编写,多处使用
  • 易维护:统一修改通用逻辑,不用到处改代码

总结起来就是:
Spring AOP 是面向切面编程,核心是不修改业务代码,统一增强方法功能。
它基于动态代理实现,把日志、事务、权限等通用逻辑抽离成切面,通过切点匹配目标方法,用五种通知完成增强。
最常用场景是事务管理、统一日志、权限校验,能大幅降低代码耦合,提升可维护性。

相关推荐
蛋蛋的就会顺顺的9 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday9 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
需要8269 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡10 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
伯恩bourne11 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_12 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs12 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲12 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog13 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户212968352616813 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm