# 小马哥讲Spring核心编程思想

## 在线播放

{% embed url="<https://www.youtube.com/playlist?list=PLwIrqQCQ5pQm30pgDLAVXxxlPRP7io5qL>" %}

## 课程目录

01丨课程介绍

02丨内容综述

03丨课前准备：学习三件套（工具、代码与大脑）

04丨特性总览：核心特性、数据存储、Web技术、框架整合与测试

05丨Spring版本特性：Spring各个版本引入了哪些新特性？

06丨Spring模块化设计：Spring功能特性如何在不同模块中组织？

07丨Java语言特性运用：各种Java语法特性是怎样被Spring各种版本巧妙运用的？

08丨JDK API实践：Spring怎样取舍Java I O、集合、反射、动态代理等API的使用

09丨Java EE API整合：为什么Spring要与“笨重”的Java EE共舞？

10丨Spring编程模型：Spring实现了哪些编程模型？

11丨Spring核心价值：我们能从Spring Framework中学到经验和教训呢？

12丨面试题精选

13丨IoC发展简介：你可能对IoC有些误会？

14丨IoC主要实现策略：面试官总问IoC和DI的区别，他真的理解吗？

15丨IoC容器的职责：IoC除了依赖注入，还涵盖哪些职责呢？

16丨IoC容器的实现：IoC容器是开源框架的专利吗？

17丨传统IoC容器实现：JavaBeans也是IoC容器吗？

18丨轻量级IoC容器：如何界定IoC容器的“轻重”？

19丨依赖查找 VS

20丨构造器注入 VS

21丨面试题精选

22丨Spring IoC依赖查找：依赖注入还不够吗？依赖查找存在的价值几何？

23丨Spring IoC依赖注入：Spring提供了哪些依赖注入模式和类型呢？

24丨Spring IoC依赖来源：依赖注入和查找的对象来自于哪里？

25丨Spring IoC配置元信息：Spring IoC有哪些配置元信息？它们的进化过程是怎样的？

26丨Spring IoC容器：BeanFactory和ApplicationContext谁才是Spring IoC容器？

27丨Spring应用上下文：ApplicationContext除了IoC容器角色，还提供哪些特性？

28丨使用Spring IoC容器：选BeanFactory还是ApplicationContext？

29丨Spring IoC容器生命周期：IoC容器启停过程中发生了什么？

30丨面试题精选

31丨定义Bean：什么是BeanDefinition？

32丨BeanDefinition元信息：除了Bean名称和类名，还有哪些Bean元信息值得关注？

33丨命名Spring Bean：id和name属性命名Bean，哪个更好？

34丨Spring Bean的别名：为什么命名Bean还需要别名？

35丨注册Spring Bean：如何将BeanDefinition注册到IoC容器？

36丨实例化Spring Bean：Bean实例化的姿势有多少种？

37丨初始化Spring Bean：Bean初始化有哪些方式？

38丨延迟初始化Spring Bean：延迟初始化的Bean会影响依赖注入吗？

39丨销毁Spring Bean： 销毁Bean的基本操作有哪些？

40丨回收Spring Bean：Spring IoC容器管理的Bean能够被垃圾回收吗？

41丨面试题精选

42丨依赖查找的今世前生：Spring IoC容器从Java标准中学到了什么？

43丨单一类型依赖查找：如何查找已知名称或类型的Bean对象？

44丨集合类型依赖查找：如何查找已知类型多个Bean集合？

45丨层次性依赖查找：依赖查找也有双亲委派？

46丨延迟依赖查找：非延迟初始化Bean也能实现延迟查找？

47丨安全依赖查找

48丨内建可查找的依赖：哪些Spring IoC容器内建依赖可供查找？

49丨依赖查找中的经典异常：Bean找不到？Bean不是唯一的？Bean创建失败？

50丨面试题精选

51丨依赖注入的模式和类型：Spring提供了哪些依赖注入的模式和类型？

52丨自动绑定（Autowiring）：为什么Spring会引入Autowiring？

53丨自动绑定（Autowiring）模式：各种自动绑定模式的使用场景是什么？

54丨自动绑定（Autowiring）限制和不足：如何理解和挖掘官方文档中深层次的含义？

55丨Setter方法依赖注入：Setter注入的原理是什么？

56丨构造器依赖注入：官方为什么推荐使用构造器注入？

57丨字段注入：为什么Spring官方文档没有单独列举这种注入方式？

58丨方法注入：方法注入是@Autowired专利吗？

59丨接口回调注入：回调注入的使用场景和限制有哪些？

60丨依赖注入类型选择：各种依赖注入有什么样的使用场景？

61丨基础类型注入：String和Java原生类型也能注入Bean的属性，它们算依赖注入吗？

62丨集合类型注入：注入Collection和Map类型的依赖区别？还支持哪些集合类型？

63丨限定注入：如何限定Bean名称注入？如何实现Bean逻辑分组注入？

64丨延迟依赖注入：如何实现延迟执行依赖注入？与延迟依赖查找是类似的吗？

65丨依赖处理过程：依赖处理时会发生什么？其中与依赖查找的差异在哪？

66丨@Autowired注入：@Autowired注入的规则和原理有哪些？

67丨JSR 330 @Inject注入：@Inject与@Autowired的注入原理有怎样的联系？

68丨Java通用注解注入原理：Spring是如何实现@Resource和@EJB等注解注入的？

69丨自定义依赖注入注解：如何最简化实现自定义依赖注入注解？

70丨面试题精选

71丨依赖查找的来源：除容器内建和自定义Spring Bean之外，还有其他来源提供依赖查找吗？

72丨依赖注入的来源：难道依赖注入的来源与依赖查找的不同吗？

73丨Spring容器管理和游离对象：为什么会有管理对象和游离对象？

74丨Spring Bean Definition作为依赖来源：Spring Bean的来源

75丨单例对象作为依赖来源：单体对象与普通Spring Bean存在哪些差异？

76丨非Spring容器管理对象作为依赖来源：如何理解ResolvableDependency？

77丨外部化配置作为依赖来源：@Value是如何将外部化配置注入Spring Bean的？

78丨面试题精选

79丨Spring Bean作用域：为什么Spring Bean需要多种作用域？

80丨singleton Bean作用域：单例Bean在当前Spring应用真是唯一的吗？

81丨prototype Bean作用域：原型Bean在哪些场景下会创建新的实例？

82丨request Bean作用域：request Bean会在每次HTTP请求创建新的实例吗？

83丨sessionBean作用域：sessionBean在SpringMVC场景下存在哪些局限性？

84丨applicationBean作用域：applicationBean是否真的有必要？

85丨自定义Bean作用域：设计Bean作用域应该注意哪些原则？

86丨课外资料：SpringCloudRefreshScope是如何控制Bean的动态刷新？

87丨面试题精选

88丨SpringBean元信息配置阶段：BeanDefinition配置与扩展

89丨SpringBean元信息解析阶段：BeanDefinition的解析

90丨SpringBean注册阶段：BeanDefinition与单体Bean注册

91丨SpringBeanDefinition合并阶段：BeanDefinition合并过程是怎样出现的？

92丨SpringBeanClass加载阶段：BeanClassLoader能够被替换吗

93丨SpringBean实例化前阶段：Bean的实例化能否被绕开？

94丨SpringBean实例化阶段：Bean实例是通过Java反射创建吗？

95丨SpringBean实例化后阶段：Bean实例化后是否一定被是使用吗？

96丨SpringBean属性赋值前阶段：配置后的PropertyValues还有机会修改吗？

97丨Aware接口回调阶段：众多Aware接口回调的顺序是安排的？

98丨SpringBean初始化前阶段：BeanPostProcessor

99丨SpringBean初始化阶段：@PostConstruct、InitializingBean以及自定义方法

100丨SpringBean初始化后阶段：BeanPostProcessor

101丨SpringBean初始化完成阶段：SmartInitializingSingleton

102丨SpringBean销毁前阶段：DestructionAwareBeanPostProcessor用在怎样的场景

103丨SpringBean销毁阶段：@PreDestroy、DisposableBean以及自定义方法

104丨SpringBean垃圾收集（GC）：何时需要GCSpringBean？

105丨面试题精选

106丨Spring配置元信息：Spring存在哪些配置元信息？它们分别用在什么场景？

107丨Spring Bean配置元信息：BeanDefinition

108丨Spring Bean属性元信息：PropertyValues

109丨Spring容器配置元信息

110丨基于XML资源装载Spring Bean配置元信息

111丨基于Properties资源装载Spring Bean配置元信息：为什么Spring官方不推荐？

112丨基于Java注解装载Spring Bean配置元信息

113丨Spring Bean配置元信息底层实现之XML资源

114丨Spring Bean配置元信息底层实现之Properties资源

115丨Spring Bean配置元信息底层实现之Java注解

116丨基于XML资源装载Spring IoC容器配置元信息

117丨基于Java注解装载Spring IoC容器配置元信息

118丨基于Extensible XML authoring 扩展Spring XML元素

119丨Extensible XML authoring扩展原理

120丨基于Properties资源装载外部化配置

121丨基于YAML资源装载外部化配置

122丨面试题

123丨引入动机：为什么Spring不使用Java标准资源管理，而选择重新发明轮子？

124丨Java标准资源管理：JavaURL资源管理存在哪些潜规则？

125丨Spring资源接口：Resource接口有哪些语义？它是否“借鉴”了SUN的实现呢？

126丨Spring内建Resource实现：Spring框架提供了多少种内建的Resource实现呢？

127丨SpringResource接口扩展：Resource能否支持写入以及字符集编码？

128丨Spring资源加载器：为什么说Spring应用上下文也是一种Spring资源加载器？

129丨Spring通配路径资源加载器：如何理解路径通配Ant模式？

130丨Spring通配路径模式扩展：如何扩展路径匹配的规则？

131丨依赖注入Spring Resource：如何在XML和Java注解场景注入Resource对象？

132丨依赖注入ResourceLoader：除了ResourceLoaderAware回调注入，还有哪些注入方法？

133丨面试题精选

134丨Spring国际化使用场景

135丨Spring国际化接口：MessageSource不是技术的创造者，只是技术的搬运工？

136丨层次性MessageSource：双亲委派不是ClassLoader的专利吗？

137丨Java国际化标准实现：ResourceBundle潜规则多？

138丨Java文本格式化：MessageFormat脱离Spring场景，能力更强大？

139丨MessageSource开箱即用实现：ResourceBundle +MessageFormat组合拳？

140丨MessageSource内建依赖：到底“我”是谁？

141丨课外资料：SpringBoot为什么要新建MessageSource Bean？

142丨面试题精选

143丨Spring校验使用场景：为什么Validator并不只是Bean的校验？

144丨Validator接口设计：画虎不成反类犬？

145丨Errors接口设计：复杂得没有办法理解？

146丨Errors文案来源：Spring国际化充当临时工？

147丨自定义Validator：为什么说Validator容易实现，却难以维护？

148丨Validator的救赎：如果没有BeanValidation，Validator将会在哪里吗？

149丨面试题精选

150丨Spring数据绑定使用场景：为什么官方文档描述一笔带过？

151丨Spring数据绑定组件：DataBinder

152丨DataBinder绑定元数据：PropertyValues不是SpringBean属性元信息吗？

153丨DataBinder绑定控制参数：ignoreUnknownFields和ignoreInvalidFields有什么作用？

154丨Spring底层JavaBeans替换实现：BeanWrapper源于JavaBeans而高于JavaBeans？

155丨BeanWrapper的使用场景：Spring数据绑定只是副业？

156丨课外资料：标准JavaBeans是如何操作属性的

157丨DataBinder数据校验：又见Validato

158丨面试题精选

159丨Spring类型转换的实现：Spring提供了哪几种类型转换的实现？

160丨使用场景：Spring类型转换各自的使用场景以及发展脉络是怎样的？

161丨基于JavaBeans接口的类型转换：Spring是如何扩展PropertyEditor接口实现类型转换的？

162丨Spring内建PropertyEditor扩展：哪些常见类型被Spring内建PropertyEditor实现？

163丨自定义PropertyEditor扩展：不尝试怎么知道它好不好用？

164丨SpringPropertyEditor的设计缺陷：为什么基于PropertyEditor扩展并不适合作为类型转换？

165丨Spring3通用类型转换接口：为什么Converter接口设计比PropertyEditor更合理？

166丨Spring内建类型转换器：Spring的内建类型转换器到底有多丰富？

167丨Converter接口的局限性：哪种类型转换场景Converter无法满足？有什么应对之策？

168丨GenericConverter接口：为什么GenericConverter比Converter更通用？

169丨优化GenericConverter接口：为什么GenericConverter需要补充条件判断？

170丨扩展Spring类型转换器：为什么最终注册的都是ConditionalGenericConverter？
