@@ -191,7 +191,7 @@ public String[] selectImports(AnnotationMetadata annotationMetadata) {
191191
192192该方法调用链如下:
193193
194- ![ ] ( https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 3c1200712655443ca4b38500d615bb70~tplv-k3u1fbpfcp-watermark.image )
194+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 3c1200712655443ca4b38500d615bb70~tplv-k3u1fbpfcp-watermark.png )
195195
196196现在我们结合` getAutoConfigurationEntry() ` 的源码来详细分析一下:
197197
@@ -239,27 +239,27 @@ AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata autoC
239239spring-boot/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
240240```
241241
242- ![ ] ( https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 58c51920efea4757aa1ec29c6d5f9e36~tplv-k3u1fbpfcp-watermark.image )
242+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 58c51920efea4757aa1ec29c6d5f9e36~tplv-k3u1fbpfcp-watermark.png )
243243
244244从下图可以看到这个文件的配置内容都被我们读取到了。` XXXAutoConfiguration ` 的作用就是按需加载组件。
245245
246- ![ ] ( https://oss.javaguide.cn/p3-juejin /94d6e1a060ac41db97043e1758789026~tplv-k3u1fbpfcp-watermark.png )
246+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring /94d6e1a060ac41db97043e1758789026~tplv-k3u1fbpfcp-watermark.png )
247247
248248不光是这个依赖下的` META-INF/spring.factories ` 被读取到,所有 Spring Boot Starter 下的` META-INF/spring.factories ` 都会被读取到。
249249
250250所以,你可以清楚滴看到, druid 数据库连接池的 Spring Boot Starter 就创建了` META-INF/spring.factories ` 文件。
251251
252252如果,我们自己要创建一个 Spring Boot Starter,这一步是必不可少的。
253253
254- ![ ] ( https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 68fa66aeee474b0385f94d23bcfe1745~tplv-k3u1fbpfcp-watermark.image )
254+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 68fa66aeee474b0385f94d23bcfe1745~tplv-k3u1fbpfcp-watermark.png )
255255
256256** 第 4 步** :
257257
258258到这里可能面试官会问你:“` spring.factories ` 中这么多配置,每次启动都要全部加载么?”。
259259
260260很明显,这是不现实的。我们 debug 到后面你会发现,` configurations ` 的值变小了。
261261
262- ![ ] ( https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 267f8231ae2e48d982154140af6437b0~tplv-k3u1fbpfcp-watermark.image )
262+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 267f8231ae2e48d982154140af6437b0~tplv-k3u1fbpfcp-watermark.png )
263263
264264因为,这一步有经历了一遍筛选,` @ConditionalOnXXX ` 中的所有条件都满足,该类才会生效。
265265
@@ -295,27 +295,27 @@ public class RabbitAutoConfiguration {
295295
296296第一步,创建` threadpool-spring-boot-starter ` 工程
297297
298- ![ ] ( https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 1ff0ebe7844f40289eb60213af72c5a6~tplv-k3u1fbpfcp-watermark.image )
298+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 1ff0ebe7844f40289eb60213af72c5a6~tplv-k3u1fbpfcp-watermark.png )
299299
300300第二步,引入 Spring Boot 相关依赖
301301
302- ![ ] ( https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 5e14254276604f87b261e5a80a354cc0~tplv-k3u1fbpfcp-watermark.image )
302+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 5e14254276604f87b261e5a80a354cc0~tplv-k3u1fbpfcp-watermark.png )
303303
304304第三步,创建` ThreadPoolAutoConfiguration `
305305
306- ![ ] ( https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 1843f1d12c5649fba85fd7b4e4a59e39~tplv-k3u1fbpfcp-watermark.image )
306+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 1843f1d12c5649fba85fd7b4e4a59e39~tplv-k3u1fbpfcp-watermark.png )
307307
308308第四步,在` threadpool-spring-boot-starter ` 工程的 resources 包下创建` META-INF/spring.factories ` 文件
309309
310- ![ ] ( https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 97b738321f1542ea8140484d6aaf0728~tplv-k3u1fbpfcp-watermark.image )
310+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 97b738321f1542ea8140484d6aaf0728~tplv-k3u1fbpfcp-watermark.png )
311311
312312最后新建工程引入` threadpool-spring-boot-starter `
313313
314- ![ ] ( https://oss.javaguide.cn/p3-juejin /edcdd8595a024aba85b6bb20d0e3fed4~tplv-k3u1fbpfcp-watermark.png )
314+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring /edcdd8595a024aba85b6bb20d0e3fed4~tplv-k3u1fbpfcp-watermark.png )
315315
316316测试通过!!!
317317
318- ![ ] ( https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ 9a265eea4de742a6bbdbbaa75f437307~tplv-k3u1fbpfcp-watermark.image )
318+ ![ ] ( https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/ 9a265eea4de742a6bbdbbaa75f437307~tplv-k3u1fbpfcp-watermark.png )
319319
320320## 总结
321321
0 commit comments