为什么要重学 AOP:补齐 OOP 的最后一块拼图
很多开发者在掌握 Spring 基础后,面对声明式事务、权限校验、日志记录等横切关注点,往往陷入“要么每个 Service 重复写代码,要么乱用工具类”的困境。这门课正是为了解决这个问题:它不满足于教你怎么配几个注解,而是从 OOP(面向对象编程)的局限性切入,帮你重建对「横切」的理解。你会发现,AOP 不是 Spring 的特例,而是 Java 原生设计模式(代理、拦截器、谓词)在框架层面的统一落地。课程前半段扎实梳理了静态代理与动态代理的区别、Join Point 的筛选逻辑以及拦截器的执行顺序,这些底层原理弄通了,后续调试复杂切面时才能心中有数,而不是盲目复制粘贴。
先看哪几块:从概念到编程模型的进阶路径
建议的学习顺序并非线性平推。对于有一定 Java 基础但 AOP 概念模糊的学习者,应优先攻克第 07 至 10 节。这四节分别对应 AOP 的三大核心设计模式:Proxy(代理)、Predicate(判断)和 Interceptor(拦截)。只有理解了 JDK 动态代理如何生成字节码、拦截器链是如何环绕执行的,你才能明白 Spring AOP 的底层机制。紧接着,第 11 节梳理 Spring AOP 的能力边界,明确它适合什么、不适合什么(比如接口代理 vs CGLIB 类代理的选择),这是避免生产环境踩坑的关键。最后再进入第 12 节的编程模型,对比注解驱动、XML 配置和底层 API 三种方式的优劣,此时你才能理解为什么现代 Spring Boot 项目几乎全链路转向注解,以及切面表达式(Pointcut Expression)背后的匹配逻辑。
学完能做什么:独立完成可维护的横切逻辑
完成本课程并配合资料练习后,你将能够独立设计并实现非业务核心的通用逻辑。具体而言,你可以基于注解自定义实现方法级别的访问控制,利用动态代理封装统一的接口响应格式或耗时统计,以及通过切面语法精准拦截特定包路径下的异常抛出行为。更重要的是,你将具备排查 AOP 相关故障的能力,例如区分 Bean 初始化顺序导致的切面失效问题,或理解代理对象与目标对象内存引用差异带来的调用陷阱。资料包中的示例代码是检验理解程度的标尺,建议在阅读概念后,尝试手动改写动态代理代码,而不是直接运行现成 Demo,这样才能真正把 AOP 思想内化为自己的工程能力。
课程目录
未分组
- 01 _ 课程介绍
- 02 _ 内容综述
- 03 _ 知识储备:基础、基础,还是基础!
- 04 _ AOP引入:OOP存在哪些局限性?
- 05 _ AOP常见使用场景
- 06 _ AOP概念:Aspect、Join Point和Advice等术语应该如何理解?
- 07 _ Java AOP设计模式:代理、判断和拦截器模式
- 08 _ Java AOP代理模式(Proxy):Java静态代理和动态代理的区别是什么?
- 09 _ Java AOP判断模式(Predicate):如何筛选Join Point?
- 10 _ Java AOP拦截器模式(Interceptor):拦截执行分别代表什么?
- 11 _ Spring AOP 功能概述:核心特性、编程模型和使用限制
- 12 _ Spring AOP编程模型:注解驱动、XML配置驱动和底层API
- 13 _ Spring AOP设计目标:Spring AOP与 AOP框架之间的关系是竞争还是互补?
- 14 _ Spring AOP Advice类型:Spring AOP丰富了哪些AOP Advice呢?
- 15 _ Spring AOP代理实现:为什么Spring Framework选择三种不同AOP实现?
- 16 _ JDK动态代理:为什么Proxy.newProxyInstance会生成新的字节码?
- 17 _ CGLIB动态代理:为什么Java动态代理无法满足AOP的需要?
- 18 _ AspectJ代理代理:为什么Spring推荐AspectJ注解?
- 19 _ AspectJ基础:Aspect、Join Points、Pointcuts和Advice语法和特性
- 20 _ AspectJ注解驱动:注解能完全替代AspectJ语言吗?
- 21 _ 面试题精选
- 22 _ Spring核心基础:《小马哥讲Spring核心编程思想》还记得多少?
- 23 _ @AspectJ注解驱动
- 24 _ 编程方式创建 @AspectJ代理
- 25 _ XML配置驱动 - 创建AOP代理
- 26 _ 标准代理工厂API - ProxyFactory
- 27 _ @AspectJ Pointcut指令与表达式:为什么Spring只能有限支持?
- 28 _ XML配置Pointcut
- 29 _ API实现Pointcut
- 30 _ @AspectJ拦截动作:@Around与@Pointcut有区别吗?
- 31 _ XML配置Around Advice
- 32 _ API实现Around Advice
- 33 _ @AspectJ前置动作:@Before与@Around谁优先级执行?
- 34 _ XML配置Before Advice
- 35 _ API实现Before Advice
- 36 _ @AspectJ后置动作 - 三种After Advice之间的关系?
- 37 _ XML配置三种After Advice
- 38 _ API实现三种After Advice
- 39 _ 自动动态代理
- 40 _ 替换TargetSource
- 41 _ 面试题精选
- 42 _ Spring AOP API整体设计
- 43 _ 接入点接口 - Joinpoint
- 44 _ Joinpoint条件接口 - Pointcut
- 45 _ Pointcut操作 - ComposablePointcut
- 46 _ Pointcut便利实现
- 47 _ Pointcut AspectJ实现 - AspectJExpressionPointcut
- 48 _ Joinpoint执行动作接口 - Advice
- 49 _ Joinpoint Before Advice标准实现
- 50 _ Joinpoint Before Advice AspectJ实现
- 51 _ Joinpoint After Advice标准实现
- 52 _ Joinpoint After Advice AspectJ实现
- 53 _ Advice容器接口 - Advisor
- 54 _ Pointcut与Advice连接器 - PointcutAdvisor
- 55 _ Introduction与Advice连接器 - IntroductionAdvisor
- 56 _ Advisor的Interceptor适配器 - AdvisorAdapter
- 57 _ AdvisorAdapter实现
- 58 _ AOP代理接口 - AopProxy
- 59 _ AopProxy工厂接口与实现
- 60 _ JDK AopProxy实现 - JdkDynamicAopProxy
- 61 _ CGLIB AopProxy实现 - CglibAopProxy
- 62 _ AopProxyFactory配置管理器 - AdvisedSupport
- 63 _ Advisor链工厂接口与实现 - AdvisorChainFactory
- 64 _ 目标对象来源接口与实现 - TargetSource
- 65 _ 代理对象创建基础类 - ProxyCreatorSupport
- 66 _ AdvisedSupport事件监听器 - AdvisedSupportListener
- 67 _ ProxyCreatorSupport标准实现 - ProxyFactory
- 68 _ ProxyCreatorSupport IoC容器实现 - ProxyFactoryBean
- 69 _ ProxyCreatorSupport AspectJ实现 - AspectJProxyFactory
- 70 _ IoC容器自动代理抽象 - AbstractAutoProxyCreator
- 71 _ IoC容器自动代理标准实现
- 72 _ IoC容器自动代理 AspectJ 实现 - AspectJAwareAdvisorAutoProxyCreator
- 73 _ AOP Infrastructure Bean接口 - AopInfrastructureBean
- 74 _ AOP上下文辅助类 - AopContext
- 75 _ 代理工厂工具类 - AopProxyUtils
- 76 _ AOP工具类 - AopUtils
- 77 _ AspectJ Enable模块驱动实现 - @EnableAspectJAutoProxy
- 78 _ AspectJ XML配置驱动实现 - _aop_aspectj-autoproxy__
- 79 _ AOP配置Schema-based 实现 - _aop_config__
- 80 _ Aspect Schema-based实现 - _aop_aspect__
- 81 _ Pointcut Schema-based实现 - _aop_pointcut__
- 82 _ Around Advice Schema-based实现 - _aop_around__
- 83 _ Before Advice Schema-based实现 - _aop_before__
- 84 _ After Advice Schema-based实现 - _aop_after__
- 85 _ After Returning Advice Schema-based实现 - _aop_after-returning__
- 86 _ After Throwing Advice Schema-based实现 - _aop_after-throwing__
- 87 _ Adviser Schema-based实现 - _aop_advisor__
- 88 _ Introduction Schema-based实现 - _aop_declare-parents__
- 89 _ 作用域代理Schema-based实现 - _aop_scoped-proxy__
- 90 _ 面试题精选
- 91 _ 抽象工厂模式(Abstract factory)实现
- 92 _ 构建器模式(Builder)实现
- 93 _ 工厂方法模式(Factory method)实现
- 94 _ 原型模式(Prototype)实现
- 95 _ 单例模式(Singleton)实现
- 96 _ 适配器模式(Adapter)实现
- 97 _ 组合模式(Composite)实现
- 98 _ 装饰器模式(Decorator)实现
- 99 _ 享元模式(Flyweight)实现
- 100 _ 代理模式(Proxy)实现
- 101 _ 模板方法模式(Template Method)实现
- 102 _ 责任链模式(Chain of Responsibility)实现
- 103 _ 观察者模式(Observer)实现
- 104 _ 策略模式(Strategy)实现
- 105 _ 命令模式(Command)实现
- 106 _ 状态模式(State)实现
- 107 _ 面试题精选
- 108 _ Spring AOP在 Spring 事件(Events)
- 109 _ Spring AOP在Spring 事务(Transactions)理论基础
- 110 _ Spring AOP在Spring 事务(Transactions)源码分析
- 111 _ Spring AOP在Spring 缓存(Caching)
- 112 _ Spring AOP在Spring本地调度(Scheduling)
- 113 _ 面试题精选
- 114 _ 结束语





