springboot自动装配大概原理

自动装配

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

原文链接:https://www.cnblogs.com/Weilaiqaq/p/17353571.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot自动装配大概原理 - Python技术站

(0)
上一篇 2023年4月25日
下一篇 2023年4月25日

相关文章

  • JSP中param标签用法实例分析

    即将为您讲解JSP中param标签的用法。 什么是param标签 param标签是JSP中一个自定义标签,用于向一个JSP标记库动态传递参数。该标签必须被包含在定义了该库的标记文件中,以便在库的使用者中提供一些参数化的功能。 param标签的使用方法 下面是param标签的通用语法: <jsp:param [name="parameter_n…

    Java 2023年6月15日
    00
  • java实现数字炸弹

    Java实现数字炸弹是一种常见的编程练习,主要是为了训练学生对于递归算法的理解和运用能力,以下是数字炸弹的完整攻略: 什么是数字炸弹? 数字炸弹指的是在一个数字序列中寻找出现次数最高的数字,并将出现次数最高的数字从序列中删除,接着重复以上步骤,直到序列为空。 怎样实现数字炸弹? 1. 将数字序列分解为数字数组 在Java中,我们可以将数字序列转化为数字数组,…

    Java 2023年5月23日
    00
  • MyBatis-Plus 修改和添加自动填充时间方式

    让我给您详细讲解”MyBatis-Plus 修改和添加自动填充时间方式”的完整攻略。 什么是自动填充时间? MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,可以轻松地实现 MyBatis 中的常见操作,如分页。自动填充时间功能是 MP 的一项重要功能之一,它可以在往表中插入记录和修改记录时,自动填充时间字段,无需手动设置。 MP 自动填…

    Java 2023年5月20日
    00
  • Java快速排序与归并排序及基数排序图解示例

    Java快速排序与归并排序及基数排序图解示例 快速排序、归并排序和基数排序是算法中常用的排序方法,以下分别进行详细讲解。 快速排序 快速排序是一种分治算法,其基本思想是将一个大的数据序列分成两个小的数据序列。具体做法是通过递归实现的,在每次递归时选定一个基准数(通常选第一个或者最后一个数),将整个序列中小于基准数的数放在基准数左边,大于基准数的数放在基准数右…

    Java 2023年5月19日
    00
  • 详解如何在Spring Boot启动后执行指定代码

    在Spring Boot启动后执行指定代码可以使用Spring Boot提供的ApplicationRunner和CommandLineRunner接口。这两个接口都是在Spring Boot应用程序启动完成后运行的回调,并且被称为Spring Boot应用程序的启动回调。 ApplicationRunner接口 ApplicationRunner接口中包含…

    Java 2023年5月20日
    00
  • 详解SpringBoot Starter作用及原理

    详解SpringBoot Starter作用及原理 简介 Spring Boot Starter简化了Spring Boot应用程序的依赖性管理,并提供了快速启动应用程序所需的所有依赖关系的打包方式。 什么是SpringBoot Starter 在Spring Boot项目开发中,我们可以参考Spring Boot Starter组织的maven工程来进行依…

    Java 2023年5月19日
    00
  • java之如何定义USB接口

    当我们需要让一个设备(如鼠标、键盘、移动硬盘)和计算机之间进行数据传输时,可以通过USB接口来实现。在Java中,我们也可以定义USB接口,并通过它与外部设备进行数据传输交互。 以下是Java定义USB接口的攻略: 1. 概述 在Java中,我们可以通过编写USB接口类来定义USB设备与计算机之间的数据传输协议。该USB接口类可以有多个实现,每个实现都对应不…

    Java 2023年5月26日
    00
  • Java中绝对值函数的介绍与其妙用

    下面是Java中绝对值函数的介绍与其妙用的完整攻略。 一、绝对值函数的介绍 在Java中,绝对值函数可用于求一个数的绝对值。绝对值指的是去掉一个数的符号,得到该数的正值。在Java中,求绝对值的函数是Math类中的abs方法。abs方法有两个重载: public static int abs(int a) public static long abs(lon…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部