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的出现,得益于“习惯优于配置”的理念,没有繁琐的配置.难以集成的内容(大多数流行第 ...
随机推荐
- ABAP 调用HTTP上传附件(二)之中文乱码
1.这篇文章的由来 之前已经发表了<ABAP 调用HTTP上传附件>的文章,详细介绍了如何通过HTTP请求传输附件,可点击链接参考原有文档 因为之前对传输文件的中文文件名处理上解释不够详细 ...
- 【ACM算法竞赛日常训练】DAY1题解与分析
DAY1 共四题: 月月查华华的手机:https://ac.nowcoder.com/acm/problem/23053 Rinne Loves Edges:https://ac.nowcoder.c ...
- CTF-RE-学习记录-汇编-2
汇编工具DTDebug 下载后设置好odd与插件路径,同时在属性中设置为管理员身份运行(无Administrator权限进入的时候一直在提示) 寄存器 存储数据: CPU>内存>硬盘 32 ...
- mybatis初级教程
resultType与resultMap resultType:设置默认的映射关系 resultMap:设置自定义的映射关系 查询功能必须设置这两个其中的一个 在resources下面创建包,那么就得 ...
- 数据泵:impdp导入用户ORA-01653
,问题描述:在导入一个用户数据的时候,大小为14G左右,导进来的时候卡半天,后来发现是表空间满了,已经恢复了大概6G左右,剩下8G左右没有恢复.此时磁盘剩余19G,加了15G的表空间,磁盘就剩下4G左 ...
- Get Your Wish
Get Your Wish (https://www.luogu.com.cn/problem/P7262) 一个模拟题 解读一下题目:简单来说就是在现在重力的方向上,如果有水滴和电子元件就GG,否则 ...
- MAPPO学习笔记(1):从PPO算法开始
由于这段时间的学习内容涉及到MAPPO算法,并且我对MAPPO算法这种多智能体算法的信息交互机制不甚了解,于是写了这个系列的笔记,目的是巩固知识,并且进行一些粗浅又滑稽的总结. 1.PPO算法的介绍 ...
- vue将页面(dom元素)转换成图片,并保存到本地
1 npm install html2canvas --save <template> <div class="QRCode-box"> <img i ...
- [Pytorch框架] 2.1.3 神经网络包nn和优化器optm
文章目录 PyTorch 基础 : 神经网络包nn和优化器optm 定义一个网络 损失函数 优化器 PyTorch 基础 : 神经网络包nn和优化器optm torch.nn是专门为神经网络设计的模块 ...
- 2022CSP游记
目录 CSP-J2022 7:45 8:15 8:27 8:38 9:12 9:23 10:34 11:57 中午 CSP-S2022 2:27 4:15 6:12 估分 普及 提高 自查 出分 废物 ...