首页 > 其他分享 >springboot自动装配大概原理

springboot自动装配大概原理

时间:2023-04-25 19:12:13浏览次数:34  
标签:装配 springboot spring 配置 boot 导入 自动 原理

自动装配

pom.xml

  • spring-boot-dependence:核心都依赖在父类工程中!
  • 我们在写入或者引入springboot依赖的时候,不需要指定版,因为有这些仓库的版本

启动器:------spring boot的启动场景

  • 比如spring-boot-starter-web,他就会帮我们导入web环境苏需要的依赖。
  • springboot会将所有的功能场景,都变成一个个启动器。
  • 我们使用什么功能,只需要找到对应的启动器(starter)就可以了

主程序:

//springbootApplication:标注这个类是一个springboot的应用,启动类下的所有资源被导入
@SpringBootApplication
public class HuangApplication {

    public static void main(String[] args) {
        SpringApplication.run(HuangApplication.class, args);
    }

}

注解:

@SpringBootConfiguration:springboot的配置
		@Configuration: sring配置类
		@@Component:说明这也是一个spring的组件
	
@@EnableAutoConfiguration: 自动配置
		@AutoConfigurationPackage:自动配置
		@Import(AutoConfigurationPackages.Registrar.class):导入选择器
@Import({AutoConfigurationImportSelector.class}):自动导入选择
//获取所有的配置
List<String>configurations=this.getCandidateConfigurations(annotationMetadata, attributes);

获取候选的配置:

protectedList<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
    List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));
    ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);
    Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
    return configurations;

自动配置的核心:

META-INF/spring.factories 

image-20230425161026515

Properties properties = PropertiessloaderUtils.loadProperties(resource);
所有资源加载到配置类中!

结论

​ springboot所有的自动配置都是在启动的时候扫描并加载:spring.factoriess所有的自动配置类都在这里面,但不一定全部启动,要判断条件是否成立,只要导入对应的start,就有对应的启动器了,有了启动器,我们的自动装配就会生效,然后配置就会成功。

大概步骤

1.

spring boot在启动的时候,从路径下/META-INF/spring.factories获取指定的值。

2.

将这些自动配置的类导入容器,自动配置就会生效,进行自动配置。

3.

以前我们需要自动配置的东西,现在都在springboot帮我们做。

4.

整合javaEE,解决方案和自动装配的东西都在spring-boot-autofigure- 2.7.11.RELEASE.JAR这个包下面

5.

他会把所有需要导入的组件,以类的方式返回,这些组件就会被添加到容器。

6.

容器中也会存在非常多的xxxAutoConfiguration的文件(@bean),就是这些类给容器中导入了这个场景需要的所有组件,并自动配置。

代码表示(自动配置原理)

image-20230425185325989

image-20230425185358398

image-20230425185420130

image-20230425185436815

标签:装配,springboot,spring,配置,boot,导入,自动,原理
From: https://www.cnblogs.com/Weilaiqaq/p/17353571.html

相关文章

  • spring mvc3.2 requestbody json显示原理
    1,publicinterfaceHandlerMethodReturnValueHandler{ /** *Whetherthegiven{@linkplainMethodParametermethodreturntype}is *supportedbythishandler. * *@paramreturnTypethemethodreturntypetocheck *@return{@codetrue}ifthis......
  • Springboot 在linux后台运行的方法
    1、后台运行程序nohupjava-jar自己的springboot项目.jar>日志文件名.log2>&1&命令详解:nohup:不挂断地运行命令,退出帐户之后继续运行相应的进程。>日志文件名.log:是nohup把command的输出重定向到当前目录的指定的“日志文件名.log”文件中,即输出内容不打印到屏幕上,而......
  • Springboot日期注解失败:while it seems to fit format ‘yyyy-MM-dd‘T‘HH:mm:ss.SSS
    提交字符串到后台映射为Date类型可以加上@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss")注解,但是报错了!前端提交字符串到后台,出现如下错误:whileitseemstofitformat'yyyy-MM-dd'T'HH:mm:ss.SSSZ',parsingfails(leniency?null))错误的大致意思就是字符串映射到Da......
  • MapReduce原理
         MapReduce运行流程  MapReduce容错机制 ......
  • 使用Dockerfile部署springboot打包jar包
    1、docker下载JDK1.8镜像dockerpulljava:82、编写Dockerfile文件#依赖的父镜像FROMjava:8#作者MAINTAINERdocker-admin#jar包添加到镜像中ADDxxl-job-admin-2.1.2.jarxxl-job-admin.jar#容器暴露的端口即jar程序在容器中运行的端口EXPOSE8080#容器启动之后......
  • gcc 中-O -O1 -O2 -O3 -Os -Ofast -Og优化的原理
    一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的p命令查看变量的值,改变变量的值等。并且把获取最快的编译速度作为它的目标。    当优化标识被启用之后,gcc编译器将会试图改变程序的结构(当然会在保证变换之后......
  • java面试题--springboot
    一、SpringBoot自动装配原理是什么?@SpringBootApplication@EnableAutoConfigration\@SpringBootConfigration\@ComponentScan@AutoConfigrationPackage\@ImportMETA-INF\spring.factories二、说一下@Configuration中的属性proxyBeanMethods的作用?首先,引入两个概念:Full全......
  • 深度相机技术之三:原理揭秘之-双目立体视觉
    为什么非得用双目相机才能得到深度?双目立体视觉深度相机的工作流程双目立体视觉深度相机详细工作原理    理想双目相机成像模型    极线约束    图像矫正技术    基于滑动窗口的图像匹配    基于能量优化的图像匹配双目立体视觉深度相机的优缺点--------------......
  • SpringBoot 使用 Sa-Token 完成权限认证
    一、设计思路所谓权限认证,核心逻辑就是判断一个账号是否拥有指定权限:有,就让你通过。没有?那么禁止访问!深入到底层数据中,就是每个账号都会拥有一个权限码集合,框架来校验这个集合中是否包含指定的权限码。例如:当前账号拥有权限码集合["user-add","user-delete","user-get"]......
  • BOSHIDA 三河博电科技 模块电源高低温试验箱测试原理
    BOSHIDA三河博电科技模块电源高低温试验箱测试原理 电源模块是可以直接贴装在印刷电路板上的电源供应器,其特点是可为专用集成电路(ASIC)、数字信号处理器(DSP)、微处理器、存储器、现场可编程门阵列(FPGA)及其他数字或模拟负载提供供电。一般来说,这类模块称为负载点(POL)电源供......