spring.factories 文件作用详解,@SpringBootApplication 启动过程与其关联
🔊spring.factories 文件作用详解,@SpringBootApplication 启动过程与其关联
![](https://static001.geekbang.org/infoq/69/692c547fdb2db07f5dee6fd05066d966.png)
在 maven 中引用的其他外部包加入容器的过程,需要用到 spring.factories
spring.factories 是用于 springboot 在自动装配过程中,通过扫描所有 jar 包和 classpath 下的 spring.factories 文件去加载 bean;文件格式为键值对,键是自动配置类的固定名称,值为配置文件全路径
![](https://static001.geekbang.org/infoq/12/12408f0790930c8938a02e3e98f25799.png)
@SpringBootApplication 启动过程与 spring.factories 关联
@SpringBootApplication 为一个组合注解,通过 @EnableAutoConfiguration 开启自动装配
![](https://static001.geekbang.org/infoq/fc/fc1a2d7ac31b39c209ecd2c96937f6ab.png)
点进 @EnableAutoConfiguration 发现其中有一个 @Import 注解
![](https://static001.geekbang.org/infoq/04/04e5f54bd7543361ee6ae3120b44c2ce.png)
里面写了 AutoConfigurationImportSelector, springboot 项目启动时, 会调用它里面一个方法 loadFactoryNames, 这个方法会扫描 pom 文件中引入的其他 starter 中的 spring.factories 文件, 具体的调用路径为:
📝1.selectImports
📜 2.getAutoConfigurationEntry
📘3.getCandidateConfigurations
📖4.SpringFactoriesLoader.loadFactoryNames(this.
getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader())
📅5.loadFactoryNames
🍁6.loadSpringFactories
![](https://static001.geekbang.org/infoq/d0/d06438194b539913f3cc645f6eec38c9.png)
![](https://static001.geekbang.org/infoq/26/26fa88309cdd6d7fc35ab6f6071b81ce.png)
![](https://static001.geekbang.org/infoq/6e/6edd433be9240c6405abdf8c2b84d5d0.png)
![](https://static001.geekbang.org/infoq/e0/e0db39ad834a36d9de5ca5c2e1a1ff2e.png)
最后调用 loadFactoryNames( )方法,这个方法的会扫描 pom 文件中引入的其他 starter 中的 spring.factories 文件。
spring.factories 文件内容示例如下:
复制代码
🖊️最后总结
🖲要熟练掌握技巧,一定多多坚持练习:骐骥一跃,不能十步;驽马十驾,功在不舍。
![](https://static001.geekbang.org/infoq/03/030a0476da40e1602a60985aaa71a343.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
版权声明: 本文为 InfoQ 作者【javaNice】的原创文章。
原文链接:【http://xie.infoq.cn/article/b9fcd7a71e643eb0c3216e157】。文章转载请联系作者。
评论