"黄俪发现每次调用用户服务都要写重复的权限检查代码。白歌说:'这不是前端该操心的事,用AOP把横切关注点切出去。'这一章,你将学会在不修改业务代码的前提下,为方法动态添加行为——这是Spring最优雅的魔法之一。"
AOP面向切面编程
本章定位
本章解决的核心问题:如何将日志、权限、事务等横切关注点从业务逻辑中剥离,通过声明式方式在方法执行的不同切入点动态织入增强行为。
学习路线图
学习顺序说明:先建立AOP概念体系(切面、连接点、切入点、通知、织入) → 学习如何定义切面类 → 掌握切入点表达式语法 → 按执行时机顺序学习五种通知类型 → 最后开启自动代理配置。
文件关系说明
| 文件 | 一句话角色 |
|---|---|
AOP核心概念.md | 本章理论基石,理解切面、切入点、通知、织入等核心术语。 |
Aspect.md | 切面定义注解,将普通类标记为"横切逻辑容器"。 |
Pointcut.md | 切入点注解,用表达式精确描述"在哪些方法上织入"。 |
Before.md | 前置通知,方法执行前运行(如参数校验、权限检查)。 |
After.md | 后置通知,方法无论成败都会执行(如资源清理)。 |
AfterReturning.md | 返回通知,方法成功返回后执行(如结果日志记录)。 |
AfterThrowing.md | 异常通知,方法抛出异常后执行(如异常告警)。 |
Around.md | 环绕通知,最强大的通知类型,完全控制方法执行流程(如事务、性能监控)。 |
EnableAspectJAutoProxy.md | 开启自动代理的开关注解,AOP生效的"总闸"。 |
知识图谱
核心逻辑:AOP的本质是"代理模式 + 方法拦截";@Aspect定义切面,@Pointcut定位目标,@Around是最强大的通知(事务基于此实现);@EnableAspectJAutoProxy开启Spring的AspectJ自动代理机制,在Bean初始化阶段通过BeanPostProcessor创建代理对象——这正是上一章生命周期知识的直接应用。
与下一章的衔接
本章学完后,你已经掌握了如何通过AOP在不侵入业务代码的前提下添加横切行为。下一章「数据访问与事务管理」将解决:如何在数据库操作中保证ACID特性——而Spring声明式事务(@Transactional)的底层实现,正是依托于本章所学的AOP机制,通过@Around通知在方法前后自动开启、提交或回滚事务。没有AOP基础,就无法真正理解声明式事务的魔法从何而来。