SpringBoot自动装配原理剖析(自己理解,有错请指出)
注解
主类 @SpringBootApplication
- @EnableAutoConfiguration
- @Import({AutoConfigurationImportSelector.class})
- @Import({AutoConfigurationImportSelector.class})
- 通过 selectImports方法读取META-INF 文件夹下的 spring.factories文件中的全限定类名,返回得到字符串数组,这样就完成了springboot的自动加载
点击查看代码
public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!this.isEnabled(annotationMetadata)) { return NO_IMPORTS; } else { AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(annotationMetadata); return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations()); } }
selectImports 方法原理剖析
1.得到注解中的所有属性信息{excludeName=[], exclude=[]}
2.加载META-INF/spring-autoconfigure-metadata.properties,获取所有支持自
动配置的信息
3.去除不需要的
4.然后使用AutoConfigurationImportFilter进行过滤,过滤的方式基本上是判断现有系统是否引入了某个组件,(系统是否使用哪个组件是在pom定义的时候就确定了的)。总而言之,此过滤器会检查候选配置类的注解@ConditionalOnClass,如果要求的类在classpath 中不存在,则这个候选配置类会被排除掉
5.现在已经找到所有需要被应用的候选配置类
本文作者:七友的二度浪漫
本文链接:https://www.cnblogs.com/sy2022/p/16379767.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步