为什么要重学 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 思想内化为自己的工程能力。

课程目录

未分组

  1. 01 _ 课程介绍
  2. 02 _ 内容综述
  3. 03 _ 知识储备:基础、基础,还是基础!
  4. 04 _ AOP引入:OOP存在哪些局限性?
  5. 05 _ AOP常见使用场景
  6. 06 _ AOP概念:Aspect、Join Point和Advice等术语应该如何理解?
  7. 07 _ Java AOP设计模式:代理、判断和拦截器模式
  8. 08 _ Java AOP代理模式(Proxy):Java静态代理和动态代理的区别是什么?
  9. 09 _ Java AOP判断模式(Predicate):如何筛选Join Point?
  10. 10 _ Java AOP拦截器模式(Interceptor):拦截执行分别代表什么?
  11. 11 _ Spring AOP 功能概述:核心特性、编程模型和使用限制
  12. 12 _ Spring AOP编程模型:注解驱动、XML配置驱动和底层API
  13. 13 _ Spring AOP设计目标:Spring AOP与 AOP框架之间的关系是竞争还是互补?
  14. 14 _ Spring AOP Advice类型:Spring AOP丰富了哪些AOP Advice呢?
  15. 15 _ Spring AOP代理实现:为什么Spring Framework选择三种不同AOP实现?
  16. 16 _ JDK动态代理:为什么Proxy.newProxyInstance会生成新的字节码?
  17. 17 _ CGLIB动态代理:为什么Java动态代理无法满足AOP的需要?
  18. 18 _ AspectJ代理代理:为什么Spring推荐AspectJ注解?
  19. 19 _ AspectJ基础:Aspect、Join Points、Pointcuts和Advice语法和特性
  20. 20 _ AspectJ注解驱动:注解能完全替代AspectJ语言吗?
  21. 21 _ 面试题精选
  22. 22 _ Spring核心基础:《小马哥讲Spring核心编程思想》还记得多少?
  23. 23 _ @AspectJ注解驱动
  24. 24 _ 编程方式创建 @AspectJ代理
  25. 25 _ XML配置驱动 - 创建AOP代理
  26. 26 _ 标准代理工厂API - ProxyFactory
  27. 27 _ @AspectJ Pointcut指令与表达式:为什么Spring只能有限支持?
  28. 28 _ XML配置Pointcut
  29. 29 _ API实现Pointcut
  30. 30 _ @AspectJ拦截动作:@Around与@Pointcut有区别吗?
  31. 31 _ XML配置Around Advice
  32. 32 _ API实现Around Advice
  33. 33 _ @AspectJ前置动作:@Before与@Around谁优先级执行?
  34. 34 _ XML配置Before Advice
  35. 35 _ API实现Before Advice
  36. 36 _ @AspectJ后置动作 - 三种After Advice之间的关系?
  37. 37 _ XML配置三种After Advice
  38. 38 _ API实现三种After Advice
  39. 39 _ 自动动态代理
  40. 40 _ 替换TargetSource
  41. 41 _ 面试题精选
  42. 42 _ Spring AOP API整体设计
  43. 43 _ 接入点接口 - Joinpoint
  44. 44 _ Joinpoint条件接口 - Pointcut
  45. 45 _ Pointcut操作 - ComposablePointcut
  46. 46 _ Pointcut便利实现
  47. 47 _ Pointcut AspectJ实现 - AspectJExpressionPointcut
  48. 48 _ Joinpoint执行动作接口 - Advice
  49. 49 _ Joinpoint Before Advice标准实现
  50. 50 _ Joinpoint Before Advice AspectJ实现
  51. 51 _ Joinpoint After Advice标准实现
  52. 52 _ Joinpoint After Advice AspectJ实现
  53. 53 _ Advice容器接口 - Advisor
  54. 54 _ Pointcut与Advice连接器 - PointcutAdvisor
  55. 55 _ Introduction与Advice连接器 - IntroductionAdvisor
  56. 56 _ Advisor的Interceptor适配器 - AdvisorAdapter
  57. 57 _ AdvisorAdapter实现
  58. 58 _ AOP代理接口 - AopProxy
  59. 59 _ AopProxy工厂接口与实现
  60. 60 _ JDK AopProxy实现 - JdkDynamicAopProxy
  61. 61 _ CGLIB AopProxy实现 - CglibAopProxy
  62. 62 _ AopProxyFactory配置管理器 - AdvisedSupport
  63. 63 _ Advisor链工厂接口与实现 - AdvisorChainFactory
  64. 64 _ 目标对象来源接口与实现 - TargetSource
  65. 65 _ 代理对象创建基础类 - ProxyCreatorSupport
  66. 66 _ AdvisedSupport事件监听器 - AdvisedSupportListener
  67. 67 _ ProxyCreatorSupport标准实现 - ProxyFactory
  68. 68 _ ProxyCreatorSupport IoC容器实现 - ProxyFactoryBean
  69. 69 _ ProxyCreatorSupport AspectJ实现 - AspectJProxyFactory
  70. 70 _ IoC容器自动代理抽象 - AbstractAutoProxyCreator
  71. 71 _ IoC容器自动代理标准实现
  72. 72 _ IoC容器自动代理 AspectJ 实现 - AspectJAwareAdvisorAutoProxyCreator
  73. 73 _ AOP Infrastructure Bean接口 - AopInfrastructureBean
  74. 74 _ AOP上下文辅助类 - AopContext
  75. 75 _ 代理工厂工具类 - AopProxyUtils
  76. 76 _ AOP工具类 - AopUtils
  77. 77 _ AspectJ Enable模块驱动实现 - @EnableAspectJAutoProxy
  78. 78 _ AspectJ XML配置驱动实现 - _aop_aspectj-autoproxy__
  79. 79 _ AOP配置Schema-based 实现 - _aop_config__
  80. 80 _ Aspect Schema-based实现 - _aop_aspect__
  81. 81 _ Pointcut Schema-based实现 - _aop_pointcut__
  82. 82 _ Around Advice Schema-based实现 - _aop_around__
  83. 83 _ Before Advice Schema-based实现 - _aop_before__
  84. 84 _ After Advice Schema-based实现 - _aop_after__
  85. 85 _ After Returning Advice Schema-based实现 - _aop_after-returning__
  86. 86 _ After Throwing Advice Schema-based实现 - _aop_after-throwing__
  87. 87 _ Adviser Schema-based实现 - _aop_advisor__
  88. 88 _ Introduction Schema-based实现 - _aop_declare-parents__
  89. 89 _ 作用域代理Schema-based实现 - _aop_scoped-proxy__
  90. 90 _ 面试题精选
  91. 91 _ 抽象工厂模式(Abstract factory)实现
  92. 92 _ 构建器模式(Builder)实现
  93. 93 _ 工厂方法模式(Factory method)实现
  94. 94 _ 原型模式(Prototype)实现
  95. 95 _ 单例模式(Singleton)实现
  96. 96 _ 适配器模式(Adapter)实现
  97. 97 _ 组合模式(Composite)实现
  98. 98 _ 装饰器模式(Decorator)实现
  99. 99 _ 享元模式(Flyweight)实现
  100. 100 _ 代理模式(Proxy)实现
  101. 101 _ 模板方法模式(Template Method)实现
  102. 102 _ 责任链模式(Chain of Responsibility)实现
  103. 103 _ 观察者模式(Observer)实现
  104. 104 _ 策略模式(Strategy)实现
  105. 105 _ 命令模式(Command)实现
  106. 106 _ 状态模式(State)实现
  107. 107 _ 面试题精选
  108. 108 _ Spring AOP在 Spring 事件(Events)
  109. 109 _ Spring AOP在Spring 事务(Transactions)理论基础
  110. 110 _ Spring AOP在Spring 事务(Transactions)源码分析
  111. 111 _ Spring AOP在Spring 缓存(Caching)
  112. 112 _ Spring AOP在Spring本地调度(Scheduling)
  113. 113 _ 面试题精选
  114. 114 _ 结束语