首页 > 其他分享 >Spring Boot原理

Spring Boot原理

时间:2024-06-23 11:59:28浏览次数:3  
标签: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 高效、简洁、易用的关键所在。

标签:spring,配置,Boot,自动,Spring,原理,注解
From: https://www.cnblogs.com/kunyyds666/p/18263216

相关文章

  • SpringBoot前后端传递数据时常用的JSON格式数据是什么?【讲解JSON概念、语法、以及Java
    SpringBoot前后端传递数据时常用的JSON格式数据是什么?JSON概念JSON语法JSON的两种结构:JSON字符串和Java对象互转:objectMapper.writeValueAsString(person);objectMapper.readValue(jsonStr,Person.class);在SpringMVC框架中,前后端交互会自动转JsonJSON概念JSON:Jav......
  • 学生读书笔记共享系统-毕业设计-Springboot+mysql+Vue
    介绍学生读书笔记共享系统是一款专为学生设计的平台,旨在通过信息化手段实现读书笔记的共享和交流。系统分为管理端和用户端两个角色,分别为管理员和学生用户提供不同的功能模块,满足各自的需求。该系统不仅促进了学生之间的学习交流,还提升了学习效率和笔记管理的便捷性。技术栈......
  • 基于springboot的技术交流和分享平台 毕业设计 springboot+VUE
    介绍在当今迅速发展的信息时代,技术交流和知识分享已成为推动创新和个人成长的重要途径。然而,许多现有平台在笔记管理和分类上存在不足,缺乏有效的知识组织和分享机制,导致信息获取效率低下,交流互动有限。为了解决这些问题,我开发了一款基于SpringBoot的技术交流和分享平台。该平......
  • Springboot计算机毕业设计自动答疑系统小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的快速发展,学生对于知识获取和问题解决的需求日益增加。然而,传统的答疑方式,如面对面咨询或邮件回复,存在效率低下、资源分配不均等问题......
  • 基于springboot的信息技术知识竞赛系统源码数据库
    传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装信息技术知识赛系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,信息技术知识赛系统的......
  • 基于springboot的贸易行业crm系统源码数据库
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于springboot的贸易行业crm系统的开发全过程。通过分析基于springboot的贸易行业crm系统管理的不足,创建了一个计算机管理基于springboot的贸易行业crm系统的方案。文章介绍了基......
  • springboot+手机商城网站-计算机毕业设计源码201029
    摘 要在信息飞速发展的今天,网络已成为人们重要的信息交流平台。手机店每天都有大量的手机商品需要通过网络发布,为此,本人开发了一个基于springboot手机商城网站。本系统采用跨平台的JAVA语言开发,利用springboot框架进行逻辑控制,MySQL数据库存储数据,最后Tomcat服务器完成发布......
  • 基于SpringBoot的物资申领系统的设计与实现 毕业设计-附源码38604
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势。物资分配当然也不例外。物资申领系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统......
  • Springboot计算机等级考试在线答题小程序 毕业设计-附源码68573
    摘 要计算机等级考试在线答题小程序主要功能模块包括用户管理、考试动态、考试须知、在线考试、用户反馈等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取Mysql作为后台数据的主要存储单元,采用Sp......
  • 小程序+spring boot流浪动物救助系统 毕业设计-附源码12783
    摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,流浪动物救助系统被用户普遍使用,为方便用户能够可以随时进行在线查看校园志愿者的数据信息管理,特开发了流浪动物救助系......