springboot 自动装配的原理
自动装配原理
问题就是为什么我们直接导入依赖就可以使用了,甚至不用配置web.xml,tomcat等,springboot内部是如何实现的?
主启动类上的注解@SpringBootApplication里有三个重要注解:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
1.@SpringBootConfiguration
这个注解的源码是@Configuration:表示该类为主配置类,可用来装配bean,进一步@Configuration的源码是@Component,说明Spring的配置类也是Spring的一个组件,
SpringBoot本质上就是一个Spring应用,通过这个注解来加载IOC容器的配置。所以在启动类里面标注了@Configuration,意味着它也是一个IOC容器的配置类

2.@ComponentScan
这个注解作用是扫描配置类下所有包的类,等价于SSM框架整合中springmvc.xml下的:
<context:component-scan base-package="com.lian.controller"/>
3.@EnableAutoConfiguration(重点)
该注解源码包含两个重要注解
first :@AutoConfigurationPackage:自动配置包
作用:给Spring容器中导入一个Registrar注册器组件,这个注解和@ComponentScan有类似作用,也是将主配置类所在的包及其子包里面的组件扫描到IOC容器中,但是区别是:
@AutoConfigurationPackage会扫描@Enitity、@MapperScan等第三方依赖的注解
@ComponentScan只扫描@Controller/@Service/@Component/@Repository这些常见注解。所以这两个注解扫描的对象是不一样的。
second:@Import(核心):
作用:通过import导入第三方提供的bean的配置类:AutoConfigurationImportSelector:给容器中导入组件,该类下的方法:getCandidateConfigurations(AnnotationMetadata metadata,AnnotationAttributes attributes)作用是获取所有的配置
要重点关注:

其一
getSpringFactoriesLoaderFactoryClass()顾名思义能够返回spring自动装配的容器
其二
SpringFactoriesLoader.loadFactoryNames的方法读取项目资源和系统资源,从这些资源中遍历了所有的nextElement(自动装配),遍历完成后,封装为properties供我们使用
3个注解需要关注的所有类和方法:

注意点:所有的自动装配类都放在了spring.factories下:

所有的类并不是都生效的,只要导入了对应start核心注解:@ConditionalOnxx,这样自动装配类才能生效才能生效
总结:springboot自动装配通过三大注解完成,在spring.factories中保存了所有的自动装配类,只有拥有注解@ConditionalOnxx的类才拥有启动器,有了启动器才能实现自动装配,才能配置成功。
1.springboot在启动时,从类路径下/META-INF/spring.factories获得指定的值;
2.将这些自动装配成功的类导入IOC容器,自动装配即生效
3.springboot会把所有需要的组件导入,以类名的方式将这些组件添加到容器
4.容器中会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件,并自动装配
5.有了自动装配类,我们就不用再手写配置文件了
我的理解:自动装配类实现了我们之前手写的配置文件的内容以及配置文件之间的关联
有个小疑问:我在vue才刚接触到组件这个概念,之前ssm和springmvc印象都没有听过,为什么springboot会说到组件,是结合了前端的一些东西吗??
这个疑问我学几天后再反过来看。
springboot 自动装配的原理的更多相关文章
- SpringBoot 自动装配的原理分析
关于 SpringBoot 的自动装配功能,相信是每一个 Java 程序员天天都会用到的一个功能,但是它究竟是如何实现的呢?今天阿粉来带大家看一下. 自动装配案例 首先我们通过一个案例来看一下自动装配 ...
- springboot自动装配大概原理
自动装配: pom.xml spring-boot-dependence:核心都依赖在父类工程中! 我们在写入或者引入springboot依赖的时候,不需要指定版,因为有这些仓库的版本 启动器:--- ...
- SpringBoot自动装配的原理
1.SpringApplication.run(AppConfig.class,args);执行流程中有refreshContext(context);这句话. 2.refreshContext(co ...
- SpringBoot自动装配原理解析
本文包含:SpringBoot的自动配置原理及如何自定义SpringBootStar等 我们知道,在使用SpringBoot的时候,我们只需要如下方式即可直接启动一个Web程序: @SpringBoo ...
- springboot自动装配原理
最近开始学习spring源码,看各种文章的时候看到了springboot自动装配实现原理.用自己的话简单概括下. 首先打开一个基本的springboot项目,点进去@SpringBootApplica ...
- SpringBoot启动流程分析(五):SpringBoot自动装配原理实现
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- springboot自动装配原理,写一个自己的start
springboot自动装配原理 第一次使用springboot的时候,都感觉很神奇.只要加入一个maven的依赖,写几行配置,就能注入redisTemple,rabbitmqTemple等对象. 这 ...
- Springboot自动装配源码及启动原理理解
Springboot自动装配源码及启动原理理解 springboot版本:2.2.2 传统的Spring框架实现一个Web服务,需要导入各种依赖JAR包,然后编写对应的XML配置文件 等,相较而言,S ...
- 【Springboot】Springboot自动装配原理
1.核心注解就是 EnableAutoConfiguration 该注解会激活SpringBoot的自动装配功能: 代码如下: @Target(ElementType.TYPE) @Retentio ...
- springboot自动装配
Spring Boot自动配置原理 springboot自动装配 springboot配置文件 Spring Boot的出现,得益于“习惯优于配置”的理念,没有繁琐的配置.难以集成的内容(大多数流行第 ...
随机推荐
- DVWA-XSS(DOM)
漏洞详解. DOM XSS(Cross-site scripting)是一种Web安全漏洞,它利用了浏览器的DOM(文档对象模型)解析机制,通过注入恶意代码来攻击用户. DOM XSS与传统的反射型或 ...
- Tomcat启动JSP项目,搞起来了
虽然有点复古,但是还是有很多小伙伴在使用的,小编来一篇保姆级教程 1.用idea打开jsp项目 2.添加tomcat配置 3.点击后会出现配置框,这里画框的地方都选上,版本选择1.8,其他的信息内容默 ...
- 字符串算法--$\mathcal{KMP,Trie}$树
\(\mathcal{KMP算法}\) 实际上,完全没必要从\(S\)的每一个字符开始,暴力穷举每一种情况,\(Knuth.Morris\)和\(Pratt\)对该算法进行了改进,称为KMP算法. 而 ...
- 桌面应用自动化winappdriver
桌面应用自动化winappdriver 关于winappdriver 介绍 WinAppDriver全称是Windows Application Driver,它提供了一些API,使得用户可以像sel ...
- VUE2.x原理之Object.defineProperty()
Object.defineProperty()语法说明 Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性 Object.defineP ...
- 你不得不了解的CSS数据类型
在我之前的开发中,CSS对于我来说,要用什么找什么,对CSS的了解并不算深入:在我刚开始深入学习CSS时,第一个遇到的就是CSS数据类型,我听说过JS.TS的数据类型,CSS怎么也有数据类型?但是随着 ...
- 华为人工智能atlasA800-9000物理服务器离线安装及CANN安装和MindSpore安装和Tensorflow安装
目录 华为人工智能atlas A800-9000 物理服务器全程离线安装驱动以及CANN安装部署和MindSpore安装部署和Tensorflow安装部署 A800-9000 物理服务器安装驱动 使用 ...
- DVWA上low级别反射型,存储型,DOM型XSS攻击获取用户cookie
1.什么是反射型 XSS 攻击? 反射型 XSS 是指应用程序通过 Web 请求获取不可信赖的数据,并在未检验数据是否存在恶意代码的情况下,将其发送给用户. 反射型 XSS 一般可以由攻击者构造带有恶 ...
- python语法的入门
1.变量 1.1: 底层原理:现在内存空间申请一块地址来储存变量值, 然后把申请的内存地址跟变量名绑定在一起 之后只需通过访问变量名就可以获取变量值 1.2:一个变量名只能指向一个内存地址,但是一个内 ...
- LeeCode 319周赛复盘
T1: 温度转换 思路:模拟 public double[] convertTemperature(double celsius) { return new double[]{celsius + 27 ...