栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-21 SpringBoot自动装配原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-21 SpringBoot自动装配原理

https://blog.csdn.net/qwe123147369/article/details/111316396

springboot启动时,是依靠启动类的main方法来进行启动的,而main方法中执行的是SpringApplication.run() 方法,而 SpringApplication.run() 方法中会创建spring的容器,并且刷新容器。而在刷新容器的时候就会去解析启动类,然后就会去解析启动类上的@SpringBootApplication 注解,而这个注解是个复合注解,这个注解中有一个@EnableAutoConfiguration 注解,这个注解就是开启自动配置,这个注解中又有 @import注解引入了一个 AutoConfigurationimportSelector 这个类,这个类会进过一些核心方法,然后去扫描我们所有jar包下的 meta-INF 下的 spring.factories 文件,而从这个配置文件中取找key为 EnableAutoConfiguration 类的全路径的值下面的所有配置都加载,这些配置里面都是有条件注解的,然后这些条件注解会根据你当前的项目依赖的jar包以及是否配置了符合这些条件注解的配置来进行装载的。

这就是springboot自动配置的过程。

在 prepareContext() 方法中又调用 getAllSources() 方法,这个方法中,获取到的一个source就是启动类DemoApplication。然后去获取启动类,然后通过SpringApplication的 load() 方法,去加载启动类,然后在刷新容器的时候就会去将启动类在容器中进行实例化。
在刷新ApplicationContext容器时,调用register方法,开始解析启动类上的注解了。

@EnableAutoConfiguration 下的@import(AutoConfigurationimportSelector.class) 这个注解
getAutoConfigurationEntry()
getCandidateConfigurations()
SpringFactroiesLoader.loadFactoryNames()
@Conditional注解扩展而来的,只是使用了不同的组合条件来判断是否需要加载和初始化当前Bean。
所以第一个端核心代码的意思是:
启动的时候会扫描所有jar包下 meta-INF/spring.factories 这个文件。第二段代码的意思是将这些扫描到的文件转成Properties对象,后面两个核心代码的意思就是说将加载到的Properties对象放入到缓存中。

然后 getCandidateConfigurations() 方法,是只获取了key是EnableAutoConfiguration.class 的配置。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号