springboot 自动装配
2021-07-12 10:10:05 25 举报
AI智能生成
小王吧专属
作者其他创作
大纲/内容
自动配置原理分析
@SpringBootApplication
@SpringBootConfiguration
@Configuration
@Component
@EnableAutoConfiguration :自动导入包
@AutoConfigurationPackage
@Import(AutoConfigurationPackages.Registrar.class):自动注册包
@Import(AutoConfigurationImportSelector.class):自动导入包的核心
AutoConfigurationImportSelector :自动导入选择器
getAutoConfigurationEntry:获得自动配置实体
getCandidateConfigurations:获取候选的配置
protected Class<?> getSpringFactoriesLoaderFactoryClass() {\t\treturn EnableAutoConfiguration.class;//标注了 EnableAutoConfiguration注解的类\t}
其实获取的就是主启动类
public static List<String> loadFactoryNames//获取所有的加载配置
return loadSpringFactories
classLoader.getResources(FACTORIES_RESOURCE_LOCATION);:项目资源
\"META-INF/spring.factories\";从这里获取
classLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION);:系统资源
\"META-INF/spring.factories\";从这里获取配置文件
spring-boot-autoconfigure-2.4.1.jar
META-INF
spring.factories:所以的自动配置类
这么多的自动配置类为什么有的没有自动生效,需要导入对应的start才可以使用
核心注解@ConditionalOnxxx 如果这个条件都满足才会生效
从这些资源中遍历了所有的nextElement(自动配置),遍历完成之后封在为一个properites 供我们使用
@ComponentScan : 扫描当前主启动类同级的包
结论:springboot所有的自动配置都在启动类中被扫描并被加载:扫描了 spring。factories 但是不一定生效,要判断条件是否生效,只要导入对应的start ,就有对应的启动器,有了启动器,我们自动装配就会生效,然会就会配置成功
springboot 在启动的时候,从类路径下的META_INF。spring。factories获取指定的值
将这些自动配置的类导入容器,自动配置就会生效
他会把所有需要的组件,以类名返回,这些组件就会被添加到组件中
容器中存在非常多xxxautocofigtion的文件(bean),就是这些类给容器导入这个场景所需要的所有组件
收藏
0 条评论
回复 删除
下一页