为什么要学 Spring AOP?它解决什么真实痛点

在 Java 后端开发中,开发者最常面临的困境并非业务逻辑本身复杂,而是大量的“横切关注点”散落在各处。比如日志记录、事务管理、权限校验,这些代码与核心业务无关,却往往在每个 Service 方法中重复出现。若手动维护,不仅代码臃肿,后期修改成本极高。Spring AOP 的核心价值,正是将这些非业务逻辑从主流程中剥离,通过声明式的方式统一拦截和处理,让代码回归简洁。

这门课并非仅仅讲解 API 的调用,而是从编程思想入手。它首先剖析 OOP(面向对象编程)在处理这类横向需求时的局限性,进而引出 AOP(面向切面编程)的必要性。对于正处于“懂语法但不知如何设计”阶段的开发者来说,理解这种设计思想的转变,比单纯记住几个注解更具长远价值。它帮助开发者建立一种“解耦”的思维模型,这是从初级工程师迈向架构思维的必经之路。

适合什么基础?建议的学习路径

本课程对基础要求较高,前置知识必须扎实。建议学习者已熟练掌握 Java 基本语法,并深入理解面向对象特性。更重要的是,你需要对代理模式有初步概念,因为 AOP 的底层实现离不开代理。如果你从未接触过 Java 反射机制或动态代理,直接上手可能会感到吃力。

入门阶段,请重点攻克前两节关于“基础”和“OOP 局限性”的内容,这是建立认知框架的基石。随后,务必花时间理解 Java 原生的静态代理、动态代理、判断模式(Predicate)以及拦截器模式。这些是 Spring AOP 的底层原理,课程会逐一拆解其实现细节,而非跳步讲解。只有理清了这些底层逻辑,后续学习 Spring 的注解驱动和 XML 配置才会事半功倍。对于希望深入了解底层源码的读者,课程后半部分的底层 API 编程模型也是值得细嚼慢咽的精华。

学完能做什么?资料如何配合练习

完成本套课程后,你将能够独立设计并实现基于 Spring AOP 的通用解决方案。具体而言,你可以熟练运用注解驱动或 XML 配置,为现有项目添加事务管理、性能监控或安全拦截等功能,而无需侵入原有业务代码。你也能清晰区分 Proxy 模式与 Interceptor 模式的适用场景,并在实际开发中根据需求选择最合适的拦截手段。

在实践环节,建议不要仅停留在观看视频。课程提供的资料包包含了从概念引入到具体实现的完整案例。在学习“代理模式”章节时,应尝试手写一个最简单的动态代理类,观察目标对象与方法调用的区别;在学习“Spring AOP 编程模型”时,务必搭建本地环境,分别用注解和 XML 两种方式实现同一个切面,对比其配置差异与运行效果。这种“原理验证+实战配置”的组合练习,是将知识转化为肌肉记忆的关键。

课程目录

未分组

  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 _ 结束语