为什么要学 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 两种方式实现同一个切面,对比其配置差异与运行效果。这种“原理验证+实战配置”的组合练习,是将知识转化为肌肉记忆的关键。
课程目录
未分组
- 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 _ 结束语




