小马哥讲Spring核心编程思想

小马哥讲Spring核心编程思想 / 深入剖析源码,掌握核心编程特性

小马哥 《Spring Boot 编程思想》作者

  • 课程介绍
  1. 06 | Spring模块化设计:Spring功能特性如何在不同模块中组织?

  2. 07 | Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?

  3. 08 | JDK API实践:Spring怎样取舍Java I/O、集合、反射、动态代理等API的使用?

  4. 09 | Java EE API整合:为什么Spring要与“笨重”的Java EE共舞?

  5. 10 | Spring编程模型:Spring实现了哪些编程模型?

  6. 11 | Spring核心价值:我们能从Spring Framework中学到哪些经验和教训呢?

  7. 12 | 面试题精选

  8. 13 | IoC发展简介:你可能对IoC有些误会?

  9. 14 | IoC主要实现策略:面试官总问IoC和DI的区别,他真的理解吗?

  10. 15 | IoC容器的职责:IoC除了依赖注入,还涵盖哪些职责呢?

  11. 16 | 除了Spring,还有其它的IOC容器实现吗?

  12. 17 | 传统IoC容器实现:JavaBeans也是IoC容器吗?

  13. 18 | 轻量级IoC容器:如何界定IoC容器的“轻重”?

  14. 19 | 依赖查找 VS. 依赖注入:为什么Spring总会强调后者,而选择性忽视前者?

  15. 20 | 构造器注入 VS. Setter 注入:为什么Spring官方文档的解读会与作者的初心出现偏差?

  16. 21 | 面试题精选

  17. 22 | Spring IoC依赖查找:依赖注入还不够吗?依赖查找存在的价值几何?

  18. 23 | Spring IoC依赖注入:Spring提供了哪些依赖注入模式和类型呢?

  19. 24 | Spring IoC依赖来源:依赖注入和查找的对象来自于哪里?

  20. 25 | Spring IoC配置元信息:Spring IoC有哪些配置元信息?它们的进化过程是怎样的?

  21. 26 | Spring IoC容器:BeanFactory和ApplicationContext谁才是Spring IoC容器?

  22. 27 | Spring应用上下文:ApplicationContext除了IoC容器角色,还提供哪些特性?

  23. 28 | 使用Spring IoC容器:选BeanFactory还是ApplicationContext?

  24. 29 | Spring IoC容器生命周期:IoC容器启停过程中发生了什么?

  25. 30 | 面试题精选

  26. 31 | 定义Bean:什么是BeanDefinition?

  27. 32 | BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?

  28. 33 | 命名Spring Bean:id和name属性命名Bean,哪个更好?

  29. 34 | Spring Bean的别名:为什么命名Bean还需要别名?

  30. 35 | 注册Spring Bean:如何将BeanDefinition注册到IoC容器?

  31. 36 | 实例化Spring Bean:Bean实例化的姿势有多少种?

  32. 37 | 初始化Spring Bean:Bean初始化有哪些方式?

  33. 38 | 延迟初始化Spring Bean:延迟初始化的Bean会影响依赖注入吗?

  34. 39 | 销毁Spring Bean: 销毁Bean的基本操作有哪些?

  35. 40 | 回收Spring Bean:Spring IoC容器管理的Bean能够被垃圾回收吗?

  36. 41 | 面试题精选

  37. 42 | 依赖查找的今世前生:Spring IoC容器从Java标准中学到了什么?

  38. 43 | 单一类型依赖查找:如何查找已知名称或类型的Bean对象?

  39. 44 | 集合类型依赖查找:如何查找已知类型多个Bean集合?

  40. 45 | 层次性依赖查找:依赖查找也有双亲委派?

  41. 46 | 延迟依赖查找:非延迟初始化Bean也能实现延迟查找?

  42. 47 | 安全依赖查找

  43. 48 | 内建可查找的依赖:哪些Spring IoC容器内建依赖可供查找?

  44. 49 | 依赖查找中的经典异常:Bean找不到?Bean不是唯一的?Bean创建失败?

  45. 50 | 面试题精选

  46. 51 | 依赖注入的模式和类型:Spring提供了哪些依赖注入的模式和类型?

  47. 52 | 自动绑定(Autowiring):为什么Spring会引入Autowiring?

  48. 53 | 自动绑定(Autowiring)模式:各种自动绑定模式的使用场景是什么?

  49. 54 | 自动绑定(Autowiring)限制和不足:如何理解和挖掘官方文档中深层次的含义?

  50. 55 | Setter方法依赖注入:Setter注入的原理是什么?

  51. 56 | 构造器依赖注入:官方为什么推荐使用构造器注入?

  52. 57 | 字段注入:为什么Spring官方文档没有单独列举这种注入方式?

  53. 58 | 方法注入:方法注入是@Autowired专利吗?

  54. 59 | 接口回调注入:回调注入的使用场景和限制有哪些?

  55. 60 | 依赖注入类型选择:各种依赖注入有什么样的使用场景?

  56. 61 | 基础类型注入:String和Java原生类型也能注入Bean的属性,它们算依赖注入吗?

  57. 62 | 集合类型注入:注入Collection和Map类型的依赖区别?还支持哪些集合类型?

  58. 63 | 限定注入:如何限定Bean名称注入?如何实现Bean逻辑分组注入?

  59. 64 | 延迟依赖注入:如何实现延迟执行依赖注入?与延迟依赖查找是类似的吗?

  60. 65 | 依赖处理过程:依赖处理时会发生什么?其中与依赖查找的差异在哪?

  61. 66 | @Autowired注入:@Autowired注入的规则和原理有哪些?

  62. 67 | JSR-330 @Inject注入:@Inject与@Autowired的注入原理有怎样的联系?

  63. 68 | Java通用注解注入原理:Spring是如何实现@Resource和@EJB等注解注入的?

  64. 69 | 自定义依赖注入注解:如何最简化实现自定义依赖注入注解?

  65. 70 | 面试题精选

  66. 71 | 依赖查找的来源:除容器内建和自定义Spring Bean之外,还有其他来源提供依赖查找吗?

  67. 72 | 依赖注入的来源:难道依赖注入的来源与依赖查找的不同吗?

  68. 73 | Spring容器管理和游离对象:为什么会有管理对象和游离对象?

  69. 74 | Spring Bean Definition作为依赖来源:Spring Bean的来源

  70. 75 | 单例对象作为依赖来源:单体对象与普通Spring Bean存在哪些差异?

  71. 76 | 非Spring容器管理对象作为依赖来源:如何理解ResolvableDependency?

  72. 77 | 外部化配置作为依赖来源:@Value是如何将外部化配置注入Spring Bean的?

  73. 78 | 面试题精选

  74. 79 | Spring Bean作用域:为什么Spring Bean需要多种作用域?

  75. 80 | "singleton" Bean作用域:单例Bean在当前Spring应用真是唯一的吗?

  76. 81 | "prototype" Bean作用域:原型Bean在哪些场景下会创建新的实例?

  77. 82 | "request" Bean作用域:request Bean会在每次HTTP请求创建新的实例吗?

  78. 83 | "session" Bean作用域:session Bean在Spring MVC场景下存在哪些局限性?

  79. 84 | "application" Bean作用域:application Bean是否真的有必要?

  80. 85 | 自定义Bean作用域:设计Bean作用域应该注意哪些原则?

  81. 86 | 课外资料:Spring Cloud RefreshScope是如何控制Bean的动态刷新?

  82. 87 | 面试题精选

  83. 88 | Spring Bean 元信息配置阶段:BeanDefinition配置与扩展

  84. 89 | Spring Bean 元信息解析阶段:BeanDefinition的解析

  85. 90 | Spring Bean 注册阶段:BeanDefinition与单体Bean注册

  86. 91 | Spring BeanDefinition合并阶段:BeanDefinition合并过程是怎样出现的?

  87. 92 | Spring Bean Class加载阶段:Bean ClassLoader能够被替换吗?

  88. 93 | Spring Bean实例化前阶段:Bean的实例化能否被绕开?

  89. 94 | Spring Bean实例化阶段:Bean实例是通过Java反射创建吗?

  90. 95 | Spring Bean实例化后阶段:Bean实例化后是否一定被是使用吗?

  91. 96 | Spring Bean属性赋值前阶段:配置后的PropertyValues还有机会修改吗?

  92. 97 | Aware接口回调阶段:众多Aware接口回调的顺序是安排的?

  93. 98 | Spring Bean初始化前阶段:BeanPostProcessor

  94. 99 | Spring Bean初始化阶段:@PostConstruct、InitializingBean以及自定义方法

  95. 100 | Spring Bean初始化后阶段:BeanPostProcessor

  96. 101 | Spring Bean初始化完成阶段:SmartInitializingSingleton

  97. 102 | Spring Bean销毁前阶段:DestructionAwareBeanPostProcessor用在怎样的场景?

  98. 103 | Spring Bean销毁阶段:@PreDestroy、DisposableBean以及自定义方法

  99. 104 | Spring Bean垃圾收集(GC):何时需要GC Spring Bean?

  100. 105 | 面试题精选

  101. 106 | Spring配置元信息:Spring存在哪些配置元信息?它们分别用在什么场景?

  102. 107 | Spring Bean配置元信息:BeanDefinition

  103. 108 | Spring Bean属性元信息:PropertyValues

  104. 109 | Spring容器配置元信息

  105. 110 | 基于XML资源装载Spring Bean配置元信息

  106. 111 | 基于Properties资源装载Spring Bean配置元信息:为什么Spring官方不推荐?

  107. 112 | 基于Java注解装载Spring Bean配置元信息

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

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

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

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

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

  113. 118 | 基于Extensible XML authoring 扩展Spring XML元素

  114. 119 | Extensible XML authoring扩展原理

  115. 120 | 基于Properties资源装载外部化配置

  116. 121 | 基于YAML资源装载外部化配置

  117. 122 | 面试题

  118. 123 | 引入动机:为什么Spring不使用Java标准资源管理,而选择重新发明轮子?

  119. 124 | Java标准资源管理:Java URL资源管理存在哪些潜规则?

  120. 125 | Spring资源接口:Resource接口有哪些语义?它是否“借鉴”了SUN的实现呢?

  121. 126 | Spring内建Resource实现:Spring框架提供了多少种内建的Resource实现呢?

  122. 127 | Spring Resource接口扩展:Resource能否支持写入以及字符集编码?

  123. 128 | Spring资源加载器:为什么说Spring应用上下文也是一种Spring资源加载器?

  124. 129 | Spring通配路径资源加载器:如何理解路径通配Ant模式?

  125. 130 | Spring通配路径模式扩展:如何扩展路径匹配的规则?

  126. 131 | 依赖注入Spring Resource:如何在XML和Java注解场景注入Resource对象?

  127. 132 | 依赖注入ResourceLoader:除了ResourceLoaderAware回调注入,还有哪些注入方法?

  128. 133 | 面试题精选

  129. 134 | Spring国际化使用场景

  130. 135 | Spring国际化接口:MessageSource不是技术的创造者,只是技术的搬运工?

  131. 136 | 层次性MessageSource:双亲委派不是ClassLoader的专利吗?

  132. 137 | Java国际化标准实现:ResourceBundle潜规则多?

  133. 138 | Java文本格式化:MessageFormat脱离Spring场景,能力更强大?

  134. 139 | MessageSource开箱即用实现:ResourceBundle +MessageFormat组合拳?

  135. 140 | MessageSource内建依赖:到底“我”是谁?

  136. 141 | 课外资料:SpringBoot为什么要新建MessageSource Bean?

  137. 142 | 面试题精选

  138. 143 | Spring校验使用场景:为什么Validator并不只是Bean的校验?

  139. 144 | Validator接口设计:画虎不成反类犬?

  140. 145 | Errors接口设计:复杂得没有办法理解?

  141. 146 | Errors文案来源:Spring国际化充当临时工?

  142. 147 | 自定义Validator:为什么说Validator容易实现,却难以维护?

  143. 148 | Validator的救赎:如果没有Bean Validation,Validator将会在哪里吗?

  144. 149 | 面试题精选

  145. 150 | Spring数据绑定使用场景:为什么官方文档描述一笔带过?

  146. 151 | Spring数据绑定组件:DataBinder

  147. 152 | DataBinder绑定元数据:PropertyValues不是Spring Bean属性元信息吗?

  148. 153 | DataBinder绑定控制参数:ignoreUnknownFields和ignoreInvalidFields有什么作用?

  149. 154 | Spring底层JavaBeans替换实现:BeanWrapper源于JavaBeans而高于JavaBeans?

  150. 155 | BeanWrapper的使用场景:Spring数据绑定只是副业?

  151. 156 | 课外资料:标准JavaBeans是如何操作属性的

  152. 157 | DataBinder数据校验:又见Validator

  153. 158 | 面试题精选

  154. 159 | Spring类型转换的实现:Spring提供了哪几种类型转换的实现?

  155. 160 | 使用场景:Spring类型转换各自的使用场景以及发展脉络是怎样的?

  156. 161 | 基于JavaBeans接口的类型转换:Spring是如何扩展PropertyEditor接口实现类型转换的?

  157. 162 | Spring内建PropertyEditor扩展:哪些常见类型被Spring内建PropertyEditor实现?

  158. 163 | 自定义PropertyEditor扩展:不尝试怎么知道它好不好用?

  159. 164 | SpringPropertyEditor的设计缺陷:为什么基于PropertyEditor扩展并不适合作为类型转换?

  160. 165 | Spring 3通用类型转换接口:为什么Converter接口设计比PropertyEditor更合理?

  161. 166 | Spring内建类型转换器:Spring的内建类型转换器到底有多丰富?

  162. 167 | Converter接口的局限性:哪种类型转换场景Converter无法满足?有什么应对之策?

  163. 168 | GenericConverter接口:为什么GenericConverter比Converter更通用?

  164. 169 | 优化GenericConverter接口:为什么GenericConverter需要补充条件判断?

  165. 170 | 扩展Spring类型转换器:为什么最终注册的都是ConditionalGenericConverter?

  166. 171 | 统一类型转换服务:ConversionService足够通用吗?

  167. 172 | ConversionService作为依赖-能够同时作为依赖查找和依赖注入的来源吗?

  168. 173 | 面试题精选

  169. 174 | Java泛型基础:泛型参数信息在擦写后还会存在吗?

  170. 175 | Java 5类型接口-Type:Java类型到底是Type还是Class?

  171. 176 | Spring泛型类型辅助类:GenericTypeResolver

  172. 177 | Spring泛型集合类型辅助类:GenericCollectionTypeResolver

  173. 178 | Spring方法参数封装-MethodParameter:不仅仅是方法参数

  174. 179 | Spring 4.2泛型优化实现-ResolvableType

  175. 180 | ResolvableType的局限性:形式比人强?

  176. 181 | 面试题精选

  177. 182 | Java事件/监听器编程模型:为什么Java中没有提供标准实现?

  178. 183 | 面向接口的事件/监听器设计模式:单事件监听和多事件监听怎么选?

  179. 184 | 面向注解的事件/监听器设计模式:便利也会带来伤害?

  180. 185 | Spring标准事件-ApplicationEvent:为什么不用EventObject?

  181. 186 | 基于接口的Spring事件监听器:ApplicationListener为什么选择单事件监听模式?

  182. 187 | 基于注解的Spring事件监听器:@EventListener有哪些潜在规则?

  183. 188 | 注册Spring ApplicationListener:直接注册和间接注册有哪些差异?

  184. 189 | Spring事件发布器:Spring 4.2给ApplicationEventPublisher带来哪些变化?

  185. 190 | Spring 层次性上下文事件传播:这是一个Feature还是一个Bug?

  186. 191 | Spring内建事件(Built-in Events):为什么ContextStartedEvent和 ContextStoppedEvent是鸡肋事件? - 深入剖析源码,掌握核心编程特性

  187. 192 | Spring 4.2 Payload事件:为什么说PayloadApplicationEvent并非一个良好的设计?

  188. 193 | 自定义Spring事件:自定义事件业务用得上吗?

  189. 194 | 依赖注入ApplicationEventPublisher:事件推送还会引起Bug?

  190. 195 | 依赖查找ApplicationEventPublisher:ApplicationEventPublisher从何而来?

  191. 196 | ApplicationEventPublisher底层实现:ApplicationEventMulticaster也是Java Observable的延伸?

  192. 197 | 同步和异步Spring事件广播:Spring对J.U.C Executor接口的理解不够?

  193. 198 | Spring 4.1事件异常处理:ErrorHandler使用有怎样的限制?

  194. 199 | Spring事件/监听器实现原理:面向接口和注解的事件/监听器实现有区别吗?

  195. 200 | 课外资料:Spring Boot和Spring Cloud事件也是Spring事件?

  196. 201 | 面试题精选

  197. 202 | Spring注解驱动编程发展历程

  198. 203 | Spring核心注解场景分类

  199. 204 | Spring注解编程模型

  200. 205 | Spring元注解(Meta-Annotations)

  201. 206 | Spring模式注解(Stereotype Annotations)

  202. 207 | Spring组合注解(Composed Annotations)

  203. 208 | Spring注解属性别名(Attribute Aliases)

  204. 209 | Spring注解属性覆盖(Attribute Overrides)

  205. 210 | Spring @Enable模块驱动

  206. 211 | Spring条件注解

  207. 212 | 课外资料:Spring Boot和Spring Cloud是怎样在Spring注解内核上扩展的?

  208. 213 | 面试题精选

  209. 214 | 理解Spring Environment抽象

  210. 215 | Spring Environment接口使用场景

  211. 216 | Environment占位符处理

  212. 217 | 理解条件配置Spring Profiles

  213. 218 | Spring 4重构@Profile

  214. 219 | 依赖注入Environment

  215. 220 | 依赖查找Environment

  216. 221 | 依赖注入@Value

  217. 222 | Spring类型转换在Environment中的运用

  218. 223 | Spring类型转换在@Value中的运用

  219. 224 | Spring配置属性源PropertySource

  220. 225 | Spring內建的配置属性源

  221. 226 | 基于注解扩展Spring配置属性源

  222. 227 | 基于API扩展Spring外部化配置属性源

  223. 228 | 课外资料:Spring 4.1测试配置属性源-@TestPropertySource

  224. 229 | 面试题精选

  225. 230 | Spring应用上下文启动准备阶段

  226. 231 | BeanFactory创建阶段

  227. 232 | BeanFactory准备阶段

  228. 233 | BeanFactory后置处理阶段

  229. 234 | BeanFactory注册BeanpostProcessor阶段

  230. 235 | 初始化内建Bean:MessageSource

  231. 236 | 初始化内建Bean:Spring事件广播器

  232. 237 | Spring应用上下文刷新阶段

  233. 238 | Spring事件监听器注册阶段

  234. 239 | BeanFactory初始化完成阶段

  235. 240 | Spring应用上下刷新完成阶段

  236. 241 | Spring应用上下文启动阶段

  237. 242 | Spring应用上下文停止阶段

  238. 243 | Spring应用上下文关闭阶段

  239. 244 | 面试题精选

  240. 245 | 结束语

  241. 加餐1:为什么说ObjectFactory提供的是延迟依赖查找?

  242. 加餐2 | 依赖查找(注入)的Bean会被缓存吗?

  243. 加餐3 | @Bean的处理流程是怎样的?

  244. 加餐4 | BeanFactory如何处理循环依赖的?

  245. 加餐5 | MyBatis与Spring Framework是如何集成的?

课程介绍

你将获得 系统掌握 Spring 核心编程模型; 抽丝剥茧,深入剖析 Spring 源码; 50 道经典面试难题剖析与解答; 40 小时,带你成为 Java 架构高手。 讲师介绍 《2019 中国 Java 发展趋势报告》...

你将获得

  1. 系统掌握 Spring 核心编程模型;
  2. 抽丝剥茧,深入剖析 Spring 源码;
  3. 50 道经典面试难题剖析与解答;
  4. 40 小时,带你成为 Java 架构高手。

讲师介绍

  • 《2019 中国 Java 发展趋势报告》
  • 《Reactive programming 一种技术 各自表述》
  • 《Dubbo Cloud Native 实践与思考》

课程介绍

时至今日,Spring 在 Java 生态系统与就业市场上,面试出镜率之高,投产规模之广,无出其右。随着技术的发展,Spring 从往日的 IoC 框架,已发展成 Cloud Native 基础设施,衍生出大量 Spring 技术栈,如大家熟知的 Spring Boot、Spring Cloud 和 Spring Security 等。

Spring 的成功也给开发人员带来了不小的挑战,无论在架构选型,还是在日常开发中。唯有系统性地掌握 Spring Framework 思想、设计,以及实现,方可游刃有余,以免进退失据。庞大的生态更需要高效的方法来理清思路,丰富的经验来指点迷津,充足的实践来巩固效果。

本课程将专注于 Spring Framework 的核心部分,所以需要你具备 Spring 的使用经验,甚至是一些开发经验。从 Spring 特性简介入手,结合官方文档,在实战演练的基础上加深理解。每个章节中都会加入一些比较经典的面试题,帮助解决求职的燃眉之急。通过讲解编程模型、设计思想以及技术规范,站在哲学的高度,分析和猜想 Spring 的实现可能,并结合具体源码实现,不断地进行思维和实战训练,最终达到掌握特性、理解原理,学会学习的终极目的。


课程目录


特别放送

免费领取福利


限时活动推荐


订阅须知