Spring boot容器导入组件
@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容器导入组件相关推荐
- 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 ...
- springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题
如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15 14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) 针对图中所示的 ...
- Spring Boot 容器镜像分层构建
本文参考文档 Spring Boot 容器镜像 Spring Boot Maven 插件参考指南 本文使用 Maven 进行配置,Gradle 可以参考下面文档 Spring Boot Gradle ...
- Spring Boot 容器启动原理揭秘
不得不讲SpringBoot 使用起来太方便了,它的外表轻巧简单,在企业级的应用系统中非常流行,已经成为java开发者必备技能.而它采用的one-jar的方案已经深入人心,其实one-jar技术早在2 ...
- Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!
欢迎关注方志朋的博客,回复"666"获面试宝典 一.EasyExcel EasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据 ...
- Spring boot注册三大组件
注册三大组件 Spring boot 以jar包的方式 使用嵌入式的Tomcat启动Web应用 没有Web应用目录结构,没有web.xml文件 Web应用 是一个Web应用的目录结构 存在目录文件sr ...
- Spring Boot + EasyExcel 导入导出,好用到爆!
今日推荐 Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性 ...
- spring boot 分布式锁组件 spring-boot-klock-starter
基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目 快速开始 sprin ...
- Spring Boot学习总结(26)—— Spring Boot 容器启动详解
一.容器启动 spring boot 一般是指定容器启动 main 方法,然后以命令行方式启动Jar包,如: @SpringBootApplication public class Applicati ...
最新文章
- 割点 割边 板子 UVA-796
- 张孝祥Java培训视频及孙鑫java视频网址
- python怎么安装第三方库-vs2017怎么安装python第三方包
- C语言实例:3个数从小到大排序
- vSphere ESXi 5.5网络问题两例及解决方法
- iOS 实现启动屏动画(Swift实现,包含图片适配)
- 电力企业计量生产需求系统解决方案
- java BitSet2
- 如何运行导入的项目_从0到1学习Flink》—— Flink 项目如何运行?
- spring5.0学习笔记8
- vue3 main.js引入 axios_Vue3.0新特性探索
- 机器学习- 吴恩达Andrew Ng Week6 知识总结 Machine Learning System Design
- ArcGIS土地利用转移矩阵(附土地利用数据下载)
- linux下挂载移动硬盘(ntfs格式),Linux下挂载移动硬盘(NTFS格式)
- 【广告架构day2】新浪广告系统架构的演进之路:服务化改造
- Android心电数据分析,Android 根据心电图(ECG)数据分析绘制心电图
- 解决不同浏览器文字间距不同的问题
- CF1611E1 Escape The Maze (easy version)+ CF1611E2 Escape The Maze (hard version)
- 京东最爱考的前端面试题,html5移动web开发实战
- Linux命令之在终端显示「一头牛」
热门文章
- Spark Streaming简介
- Kindle:自动追更之云上之旅
- swift学习笔记-UI篇之UIImageView
- hudson部署过程
- Interview with BOA
- Discuz升级 Database Error : pre_common_syscache ADD PRIMARY KEY (cname)【解决办法】
- 利用DAC(Data-tier Application)实现数据库结构迁移
- std::string 用法
- 初探WCF 如何在配置文件中指定Address?
- 华为LTE 模块AT 命令拨号上网流程