直面 AOP 底层:从使用到源码解析

很多后端开发者在使用 Spring 时,往往把 AOP(面向切面编程)仅仅当作“日志打印”或“事务管理”的工具人,只知其用法,不知其所以然。一旦遇到复杂的拦截逻辑、性能瓶颈或是自定义扩展场景,就会陷入困境,无法独立设计切面,更无法理解其内部是如何通过动态代理和代理增强实现功能调用的。这门课解决的核心问题,就是打破这种“黑盒”状态。它不满足于教你怎么配置 `@Aspect`,而是带你深入 Spring AOP 的编程模型、API 设计与具体实现逻辑。课程旨在让你从宏观视角理解 AOP 的设计目的,再到微观层面剖析 GoF 设计模式在源码中的实际应用,从而建立起对框架底层机制的肌肉记忆。适合已经具备 Java 基础、熟悉 Spring 核心(如 IoC、Bean 生命周期)但渴望突破“调包侠”层级、希望深入源码进行二次开发或解决疑难杂症的中高级开发者。

学习路径与实战建议

建议的学习路径是“先全景,后深挖”。首先,不要直接跳进源码,务必先花时间理解 AOP 的宏观功能特性和编程模型。这一步是为了建立知识框架,明确 AOP 在 Spring 生态中的定位,避免在后续阅读源码时迷失方向。接着,进入实战环节,通过具体的案例提高开发熟练度,这里重点在于亲手编写切面,理解连接点、通知和切面表达式的实际效果。最后,进入课程的高潮部分——Spring AOP API 的设计与实现。这部分需要结合源码阅读,重点分析其中应用的 GoF 23 种设计模式,理解 Spring 是如何通过适配器、装饰者等模式来实现低代码扩展能力的。资料包中提供的教程和配套练习,建议配合每一章节的源码解析使用。不要只看视频,必须动手调试,在断点中观察代理对象的生成过程,追踪方法调用的增强链路。只有当你能独立画出 AOP 的运行流程图,并能解释为什么某些场景下 AOP 会失效(如自调用问题)时,才算真正掌握了这门课的核心内容。

学完后的独立能力

完成学习后,你不再是一个只能复制粘贴 AOP 配置的工程师。你将具备以下独立能力:第一,能够根据业务需求,独立设计并实现自定义的 AOP 拦截器,处理横切关注点(如权限校验、缓存管理、监控埋点);第二,当遇到框架层面的异常或性能问题时,能够深入源码定位瓶颈,理解 ProxyFactory、MethodInterceptor 等核心组件的工作机制;第三,掌握 Spring AOP 源码中蕴含的设计思想,能够将这些模式迁移到其他框架或自研中间件的设计中。更重要的是,你建立起了一套“由表及里”的学习方法论,未来面对其他 Spring 模块(如 MVC、Security)的源码时,也能迅速抓住重点。这门课的价值不在于记住多少 API,而在于通过解剖 AOP 这一典型模块,提升你对大型 Java 框架源码的整体驾驭能力。

课程介绍

小马哥讲 Spring AOP 编程思想视频教程,。这门课程采用循序渐进的方式,先从宏观视角通览SpringAOP的功能特性、编程模型以及设计目的,为深度掌握SpringAOP打下坚实基础。再结合实战,提高开发熟练度。然后将进入这门课程的高潮:SpringAOPAPI的设计与实现。深度解析源代码,并深入学习其中应用的GoF23种设计模式,全方位系统地掌握SpringAOPAPI的设计思想和具体实现,进一步提升自己的开发能力和开发经验。是一本学习SpringAOP的秘籍宝典。

课程目录

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