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

SpringBoot 自动装配原理

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

SpringBoot 自动装配原理

发现导入选择器

@Import(AutoConfigurationPackages.Registrar.class)

点进AutoConfigurationPackages类

//导入初始化的一些bean

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

//metadata 元数据

@Override

public void registerBeanDefinitions(AnnotationMetadata metadata,

BeanDefinitionRegistry registry) {

//PackageImport 导入元数据

register(registry, new PackageImport(metadata).getPackageName());

}

@Override

public Set determineImports(AnnotationMetadata metadata) {

return Collections.singleton(new PackageImport(metadata));

}

}

回到@EnableAutoConfiguration 注解

查看另一个注解 @Import(AutoConfigurationImportSelector.class) 自动配置导入选择

@Import(AutoConfigurationImportSelector.class)

点进AutoConfigurationImportSelector 看看

看到AutoConfigurationImportSelector 类中选择组件的方法

public String[] selectImports(AnnotationMetadata annotationMetadata)

选择组件:就是选择哪些我们配置的pom.xml中的东西

点进loadMetadata

来到 AutoConfigurationMetadataLoader类的方法

回到AutoConfigurationImportSelector类

  • 继续分析 selectImports 方法

  • getCandidateConfigurations 获取所有的配置

List configurations = getCandidateConfigurations(annotationMetadata,

attributes);

  • 核心方法

  • getCandidateConfigurations 获取候选的配置

  • loadFactoryNames 首先通过加载器加载所有的

protected List getCandidateConfigurations(AnnotationMetadata metadata,

AnnotationAttributes attributes) {

List configurations = SpringFactoriesLoader.loadFactoryNames(

getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());

Assert.notEmpty(configurations,

"No auto configuration classes found in META-INF/spring.factories. If you "

  • “are using a custom packaging, make sure that file is correct.”);

return configurations;

}

@SpringBootApplication 注解标注了 @EnableAutoConfiguration

说明一件事

@SpringBootApplication : 标注这个类是一个SpringBoot 的应用:启动类下的所有资源被导入

继续看getCandidateConfigurations 方法

  1. 这个配置不为空

  2. META-INF/spring.factories

  3. 自动配置的核心文件

查看spring.factories文件

spring.factories 文件内容

  1. Initializers 初始化的

  2. Application Listeners 监听的

  3. Auto Configuration Import Listeners 自动选择导入的包

  4. Auto Configuration Import Filters

  5. Auto Configure 自动配置

  6. Failure analyzers

  7. Template availability providers

查看spring.factories 文件中的WebMvcAutoConfiuration

WebMvcAutoConfiuration类

WebMvcProperties 类

spring.factories 文件从哪来?

&emspl先读了配置文件,才找到配置类

继续看getCandidateConfigurations 方法

点进去

来到springFactoriesLoader类

查看loadSpringFactories方法

loadSpringFactories方法 可以看到springboot 把所有的资源都加载到配置类中

Properties properties = PropertiesLoaderUtils.loadProperties(resource);

点击 FACTORIES_RESOURCE_LOCATION 常量

加载了spring.factories 文件的所有东西


[](()4结论:
  1. SpringBoot所有的自动配置都是在启动的时候扫描并加载;

  2. 所有的自动配置类都在这里面 spring.factories

  3. 但是不一定生效,要判断条件是否成立

  4. 只有导入了对应的start,就有对应的启动器了

  5. 有了启动器,我们自动装配就会生效,然后就配置成功了!

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

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

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