首页 > 其他分享 >一张图片彻底搞定springboot自动装配原理

一张图片彻底搞定springboot自动装配原理

时间:2024-07-13 21:43:32浏览次数:5  
标签:装配 搞定 springboot Spring 配置 Boot 自动 spring 注解

自动装配原理

pom.xml

父工程 spring-boot-starter-parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

父工程spring-boot-dependencies

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>3.3.1</version>
</parent>
  • spring-boot-dependencies:核心依赖在父工程中
  • 引入Spring Boot依赖时不需要指定版本,是因为有这些仓库

启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
  • 就是Spring Boot的启动场景
  • 比如spring-boot-starter-web,就会帮我们自动导入web环境的所有依赖
  • 我们需要什么功能,就只需要找到对应的启动器starter

主程序

  • 注解

  • 深入解析 @SpringBootApplication 注解

    @SpringBootApplication 是 Spring Boot 提供的一个关键注解,用于简化 Spring Boot 应用程序的配置和启动。本文将深入解析 @SpringBootApplication 注解,特别是 @EnableAutoConfiguration 的工作机制。

@SpringBootApplication 概述

@SpringBootApplication 是一个组合注解,它结合了以下三个重要注解:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

这些注解共同作用,简化了 Spring Boot 应用的配置和启动过程。

@SpringBootConfiguration

  • 作用:标识一个 Spring 配置类,替代传统的 XML 配置文件。
  • 功能:这是 @Configuration 注解的特化版本,允许在类中定义一个或多个 @Bean 方法来创建和配置 Spring 容器中的 Bean。

@ComponentScan

  • 作用:启用组件扫描。

  • 功能

    • 自动扫描和注册使用 @Component@Service@Repository@Controller 等注解标注的类为 Spring Bean。
    • 默认扫描当前包及其子包中的所有类。

深入解析 @EnableAutoConfiguration

@EnableAutoConfiguration 是 Spring Boot 自动配置的核心注解。它的作用是根据项目的依赖和配置,自动配置 Spring 应用上下文。以下是对 @EnableAutoConfiguration 详细机制的解析:

@EnableAutoConfiguration 的作用

  • 启用自动配置机制@EnableAutoConfiguration 启用 Spring Boot 的自动配置机制,它会自动配置应用程序所需的各种 Spring Bean。
  • 加载自动配置类:自动配置机制通过扫描类路径中的 META-INF/spring.factories 文件,加载其中定义的自动配置类。

自动配置的详细机制

  1. AutoConfigurationImportSelector

    @EnableAutoConfiguration 通过 AutoConfigurationImportSelector 类来选择和导入自动配置类。

    • 选择自动配置类AutoConfigurationImportSelector 实现了 DeferredImportSelector 接口,它会在所有 @Configuration 配置类处理完之后执行,选择自动配置类并将它们导入到 Spring 容器中。
  2. SpringFactoriesLoader

    SpringFactoriesLoader 是 Spring 框架中的一个工具类,它负责从 META-INF/spring.factories 文件中加载工厂类。

    • 读取 spring.factories 文件SpringFactoriesLoader 从类路径中读取 META-INF/spring.factories 文件,该文件包含了所有自动配置类的列表。
    • 解析工厂类:将这些工厂类名解析为相应的类,并返回一个包含这些类的列表。
  3. 自动配置类的加载

    • 加载配置AutoConfigurationImportSelector 会根据 spring.factories 文件中的配置,加载所有定义的自动配置类。
    • 条件加载:自动配置类通常使用 @Conditional 注解,根据条件(如类路径中是否存在特定的类,配置文件中是否设置了特定的属性)决定是否加载相应的配置。

META-INF/spring.factories 文件

META-INF/spring.factories 文件是一个关键的配置文件,它定义了各种自动配置类。例如:

运行过程

这个文件中的键是工厂类接口或注解(如 EnableAutoConfiguration),值是具体的实现类。Spring Boot 根据这些配置类自动配置应用程序所需的 Bean。

运行过程

1. **启动类**:应用程序的主类通常使用 `@SpringBootApplication` 注解标注。
2. **SpringApplication.run()**:调用 `SpringApplication.run()` 方法启动 Spring Boot 应用。
3. **初始化 Spring 上下文**:创建并初始化 Spring 应用上下文(ApplicationContext)。
4. **自动配置**:`EnableAutoConfiguration` 自动配置 Spring 上下文,加载必要的配置类和 Bean。
5. **组件扫描**:`ComponentScan` 扫描和注册所有符合条件的组件(如控制器、服务等)。
6. **应用启动**:完成所有配置和组件注册后,Spring Boot 应用启动并开始运行。

示例

总结

在这个示例中,@SpringBootApplication 注解启用了自动配置和组件扫描功能。SpringApplication.run 方法启动 Spring Boot 应用,自动配置机制会根据类路径中的依赖和配置文件中的设置,自动配置 Spring 上下文。

总结

@SpringBootApplication 注解通过结合 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 注解,极大地简化了 Spring Boot 应用的配置和启动过程。特别是 @EnableAutoConfiguration 注解,通过 AutoConfigurationImportSelectorSpringFactoriesLoader 等组件,实现了自动配置的强大功能,使得开发者可以专注于业务逻辑,而不必手动配置大量的 Spring Bean。这种自动化配置机制是 Spring Boot 高效、简洁、易用的关键所在。

标签:装配,搞定,springboot,Spring,配置,Boot,自动,spring,注解
From: https://www.cnblogs.com/kunyyds666/p/18300767

相关文章

  • 课程设计——基于SpringBoot的医院药品管理系统
    库存管理登记入库的药品。登记出库的药品。每日检查库存下限,报警。每日检查过期的药品,报警并做退回销毁处理。对有问题的药品的退回供应商。记录退回的药品的名称、数量、金额和退货原因等。2600套成品项目,均包含万字文档,图片为目前拥有的部分项目,其他包括python,java,Andr......
  • 基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源
          博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c++等开发语言,以及毕业项目实战✌    从事基于javaBS架构、CS架构、c/c++编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经......
  • springboot+vue+mybatis文化遗产管理系统+PPT+论文+讲解+售后
    信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多......
  • ​Chrome 插件: GoFullPage 一键搞定全网页截图
    在互联网时代,网页截图已成为我们日常工作和生活中不可或缺的部分。无论是保存重要信息、制作教程,还是分享有趣的内容,截图功能都显得尤为重要。然而,常规的截图工具往往只能截取当前屏幕的内容,对于长网页则显得力不从心。你是否也曾为此苦恼过? 如果你曾经尝试过用浏览器自......
  • 基于SpringBoot的校园志愿者管理系统
    你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。开发语言:Java数据库:MySQL技术:SpringBoot框架工具:MyEclipse、Tomcat系统展示首页个人中心志愿者管理活动信息管理摘要随着信息化时代的到来,管理系统趋向于智能化、系统化。校园志愿者管理系统的......
  • 基于SpringBoot的校园疫情防控系统
    你好,我是专注于计算机科学与技术的研究者。如果你对我的工作感兴趣或有任何问题,欢迎随时联系我。开发语言:Java数据库:MySQL技术:SpringBoot框架,B/S架构工具:Eclipse,Maven系统展示首页疫情动态管理防疫教育管理健康打卡管理摘要本文介绍了一个基于SpringBoot框......
  • ​Chrome 插件: GoFullPage 一键搞定全网页截图
      在互联网时代,网页截图已成为我们日常工作和生活中不可或缺的部分。无论是保存重要信息、制作教程,还是分享有趣的内容,截图功能都显得尤为重要。然而,常规的截图工具往往只能截取当前屏幕的内容,对于长网页则显得力不从心。你是否也曾为此苦恼过? 如果你曾经尝试过用浏览器......
  • 基于springboot+vue.js+uniapp的江西郊医院血库管理系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 元素缩放?一个vue指令搞定
    说在前面......
  • 一句口诀搞定清结算账务
    结算、清算之类的表述,常常让人傻傻分不清,记住一句话就行了——“联机交易、渠道清算、资金结算、期末结转”。具体怎么用的?且看本文作者的分享。清算、清结算、结算常常被颠来倒去的混用,作为银行和商户之间资金搬运工的清结算,什么时候清算,什么时候结算一直让人傻傻分不清。今......