@Import

向容器中,导入组件

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

EnableAutoConfigurationImportSelector.class

点击,进入
自动配置导包选择器

@Deprecated
public class EnableAutoConfigurationImportSelector extends AutoConfigurationImportSelector {

AutoConfigurationImportSelector

点击,进入

public String[] selectImports(AnnotationMetadata annotationMetadata) {if(!this.isEnabled(annotationMetadata)) {return NO_IMPORTS;} else {try {AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);AnnotationAttributes attributes = this.getAttributes(annotationMetadata);List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);configurations = this.removeDuplicates(configurations);configurations = this.sort(configurations, autoConfigurationMetadata);Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);this.checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);configurations = this.filter(configurations, autoConfigurationMetadata);this.fireAutoConfigurationImportEvents(configurations, exclusions);return (String[])configurations.toArray(new String[configurations.size()]);} catch (IOException var6) {throw new IllegalStateException(var6);}}
}

selectImports

方法,将所有需要导入的组件,以全类名的方式返回
这些组件就会被添加到容器中

Configurations

容器,需要导入的组件
给容器中导入非常多的自动配置类xxxAutoConfiguration
就是,给容器中导入这个场景需要的所有组件,并配置好这些组件
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作

getCandidateConfigurations(annotationMetadata, attributes)
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.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;
}
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());

配置文件位置

文件内容


Spring Boot
在启动的时候,从类路径下的META-INF/spring.factories中
获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中
自动配置类就生效,帮我们进行自动配置工作

J2EE的整体整合解决方案和自动配置都在

spring-boot-autoconfigure-1.5.9.RELEASE.jar

Spring boot容器导入组件相关推荐

  1. Spring boot(web 组件,ORM 操作 MySQL,接口架构风格—RESTful,集成 Redis,集成 Dubbo,打包)

    文章目录 1.3 第三章 Spring Boot 和 web 组件 1.3.1 SpringBoot 中拦截器 1.3.2 Spring Boot 中使用 Servlet 1.3.3 Spring B ...

  2. springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题

    如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15  14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) ​ 针对图中所示的 ...

  3. Spring Boot 容器镜像分层构建

    本文参考文档 Spring Boot 容器镜像 Spring Boot Maven 插件参考指南 本文使用 Maven 进行配置,Gradle 可以参考下面文档 Spring Boot Gradle ...

  4. Spring Boot 容器启动原理揭秘

    不得不讲SpringBoot 使用起来太方便了,它的外表轻巧简单,在企业级的应用系统中非常流行,已经成为java开发者必备技能.而它采用的one-jar的方案已经深入人心,其实one-jar技术早在2 ...

  5. Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.EasyExcel EasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据 ...

  6. Spring boot注册三大组件

    注册三大组件 Spring boot 以jar包的方式 使用嵌入式的Tomcat启动Web应用 没有Web应用目录结构,没有web.xml文件 Web应用 是一个Web应用的目录结构 存在目录文件sr ...

  7. Spring Boot + EasyExcel 导入导出,好用到爆!

    今日推荐 Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性 ...

  8. spring boot 分布式锁组件 spring-boot-klock-starter

    基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目 快速开始 sprin ...

  9. Spring Boot学习总结(26)—— Spring Boot 容器启动详解

    一.容器启动 spring boot 一般是指定容器启动 main 方法,然后以命令行方式启动Jar包,如: @SpringBootApplication public class Applicati ...

最新文章

  1. 割点 割边 板子 UVA-796
  2. 张孝祥Java培训视频及孙鑫java视频网址
  3. python怎么安装第三方库-vs2017怎么安装python第三方包
  4. C语言实例:3个数从小到大排序
  5. vSphere ESXi 5.5网络问题两例及解决方法
  6. iOS 实现启动屏动画(Swift实现,包含图片适配)
  7. 电力企业计量生产需求系统解决方案
  8. java BitSet2
  9. 如何运行导入的项目_从0到1学习Flink》—— Flink 项目如何运行?
  10. spring5.0学习笔记8
  11. vue3 main.js引入 axios_Vue3.0新特性探索
  12. 机器学习- 吴恩达Andrew Ng Week6 知识总结 Machine Learning System Design
  13. ArcGIS土地利用转移矩阵(附土地利用数据下载)
  14. linux下挂载移动硬盘(ntfs格式),Linux下挂载移动硬盘(NTFS格式)
  15. 【广告架构day2】新浪广告系统架构的演进之路:服务化改造
  16. Android心电数据分析,Android 根据心电图(ECG)数据分析绘制心电图
  17. 解决不同浏览器文字间距不同的问题
  18. CF1611E1 Escape The Maze (easy version)+ CF1611E2 Escape The Maze (hard version)
  19. 京东最爱考的前端面试题,html5移动web开发实战
  20. Linux命令之在终端显示「一头牛」

热门文章

  1. Spark Streaming简介
  2. Kindle:自动追更之云上之旅
  3. swift学习笔记-UI篇之UIImageView
  4. hudson部署过程
  5. Interview with BOA
  6. Discuz升级 Database Error : pre_common_syscache ADD PRIMARY KEY (cname)【解决办法】
  7. 利用DAC(Data-tier Application)实现数据库结构迁移
  8. std::string 用法
  9. 初探WCF 如何在配置文件中指定Address?
  10. 华为LTE 模块AT 命令拨号上网流程