SpringBoot的工作原理

Spring Boot 旨在简化 Spring 应用的开发、配置和部署,它通过约定优于配置的方式,提供了许多自动化配置和启动依赖,使得开发者可以专注于业务逻辑的开发。

核心概念:

  • 约定优于配置 (Convention over Configuration): Spring Boot 推崇遵循预定义的约定,这样开发者无需进行大量的配置。框架会根据约定自动推断需要的配置,从而减少了配置文件的编写。

  • 启动依赖 (Starter Dependencies): Spring Boot 提供了许多启动依赖,它们是一组相关的依赖项的集合,方便开发者快速引入所需的功能模块,例如 Web、JPA、Security 等。

  • 自动配置 (Auto-Configuration): Spring Boot 会根据项目中的依赖和环境条件,自动配置 Spring 应用。它会检测类路径上的依赖项,并根据这些依赖项自动创建和配置 Bean。

  • 嵌入式服务器 (Embedded Server): Spring Boot 内置了常用的服务器,例如 Tomcat、Jetty 和 Undertow。开发者无需手动部署 WAR 文件到外部服务器,可以直接运行 Spring Boot 应用。

  • Actuator: 提供监控和管理 Spring Boot 应用的功能,例如健康检查、指标收集、审计等。

工作流程:

  1. 项目启动:

    • 当 Spring Boot 应用启动时,SpringApplication.run() 方法会被调用。这是 Spring Boot 应用的入口点。
    • SpringApplication 类会执行一系列的初始化操作,包括设置应用上下文、配置环境、加载配置等。
    • SpringApplication 首先创建一个 ApplicationContext,该上下文是 Spring Framework 的核心,负责管理 Bean 的生命周期和依赖关系。
  2. 自动配置:

    • Spring Boot 的自动配置功能是通过 spring.factories 文件实现的。该文件位于 META-INF 目录下,其中包含了自动配置类的列表。
    • @EnableAutoConfiguration 注解是触发自动配置的关键。它会扫描类路径下的 spring.factories 文件,并加载其中的自动配置类。
    • 自动配置类通常使用 @Configuration 注解进行标记,并且使用 @Conditional 注解来控制是否启用配置。@Conditional 注解可以根据类路径、Bean 的存在、环境变量等条件来决定是否创建 Bean。
    • 自动配置类会创建和配置 Spring Bean,例如数据源、消息队列、Web 服务器等。
    • 例如,如果项目中引入了 spring-boot-starter-web 依赖,Spring Boot 会自动配置 Spring MVC 的相关组件,例如 DispatcherServletViewResolver 等。
  3. 组件扫描:

    • Spring Boot 会自动扫描带有 @Component@Service@Repository@Controller 等注解的类,并将它们注册为 Spring Bean。
    • @ComponentScan 注解用于指定扫描的包路径。如果没有指定,Spring Boot 会默认扫描启动类所在的包及其子包。
  4. 配置加载:

    • Spring Boot 支持多种配置方式,包括 properties 文件、YAML 文件、环境变量、命令行参数等。
    • Spring Boot 会按照一定的优先级顺序加载配置,例如命令行参数的优先级高于 properties 文件。
    • @ConfigurationProperties 注解可以将配置文件的属性绑定到 Java Bean 上,方便开发者使用配置。
  5. 嵌入式服务器启动:

    • 如果项目中引入了 spring-boot-starter-web 依赖,Spring Boot 会自动启动嵌入式服务器,例如 Tomcat。
    • 开发者无需手动配置服务器,Spring Boot 会自动完成服务器的初始化和启动。
  6. 应用运行:

    • 当 Spring Boot 应用启动完成后,就可以接收和处理请求了。
    • Spring MVC 会根据请求的 URL 找到对应的 Controller,并执行相应的处理方法。
    • 应用可以通过访问数据库、调用外部服务等方式来完成业务逻辑。

详细步骤分解:

  1. SpringApplication.run() 启动流程:

    • 创建 SpringApplication 实例:

      • 检测应用类型(Web 应用、非 Web 应用等)。
      • 查找并设置应用的 ApplicationContextInitializer
      • 查找并设置应用的 ApplicationListener
    • 准备 ApplicationContext

      • 根据应用类型创建合适的 ApplicationContext (例如:AnnotationConfigServletWebServerApplicationContext for web apps)。
      • 配置 ApplicationContext 的环境 (Environment)。
      • 将 Spring Boot 的 Banner 打印到控制台(可自定义)。
    • 执行 ApplicationContextInitializer

      • 允许在 ApplicationContext 刷新之前进行自定义初始化。
    • 加载配置:

      • 加载 application.propertiesapplication.yml 文件中的配置。
      • 处理命令行参数。
      • 将配置信息绑定到 Spring 的 Environment 中。
    • 刷新 ApplicationContext

      • 这是最关键的步骤,触发 Spring 容器的初始化。
      • 注册 Bean 定义,创建 Bean 实例,处理 Bean 依赖关系。
      • 应用自动配置,根据条件创建和配置 Bean。
    • 启动嵌入式服务器:

      • 如果应用是 Web 应用,则启动嵌入式服务器(Tomcat、Jetty、Undertow)。
    • 执行 ApplicationRunnerCommandLineRunner

      • 允许在应用启动后执行一些初始化任务。
  2. 自动配置机制深入:

    • @EnableAutoConfiguration 注解:

      • 启用自动配置功能。
      • 通过 @Import(AutoConfigurationImportSelector.class) 导入 AutoConfigurationImportSelector 类。
    • AutoConfigurationImportSelector

      • 负责查找所有可用的自动配置类。
      • META-INF/spring.factories 文件中读取自动配置类的列表。
      • 根据条件判断是否应该启用某个自动配置类。
    • @Conditional 注解:

      • 用于控制自动配置类的启用条件。
      • 常见的条件包括:
        • @ConditionalOnClass:类路径中存在指定的类。
        • @ConditionalOnMissingBean:容器中不存在指定的 Bean。
        • @ConditionalOnProperty:指定的属性存在且满足条件。
    • 自动配置类:

      • 通常使用 @Configuration 注解标记。
      • 使用 @Bean 注解定义 Bean。
      • 使用 @ConfigurationProperties 注解将配置文件的属性绑定到 Bean 上。
  3. 启动依赖 (Starter Dependencies) 的作用:

    • 简化依赖管理:将一组相关的依赖项打包在一起,方便开发者引入所需的功能模块。
    • 提供默认配置:启动依赖通常会包含默认的配置,减少了开发者需要编写的配置代码。
    • 版本管理:起步依赖会管理依赖项的版本,避免版本冲突。
  4. Actuator 的作用:

    • 提供监控和管理 Spring Boot 应用的功能。
    • 可以通过 HTTP 端点访问 Actuator 提供的信息。
    • 常用的 Actuator 端点包括:
      • /health:健康检查。
      • /metrics:指标收集。
      • /info:应用信息。
      • /beans:Bean 信息。
      • /env:环境变量。
      • /loggers:日志配置。

总结:

Spring Boot 通过约定优于配置、启动依赖和自动配置等机制,简化了 Spring 应用的开发、配置和部署。开发者可以专注于业务逻辑的开发,而无需花费大量时间在配置上。Spring Boot 还提供了 Actuator 等功能,方便开发者监控和管理应用。掌握 Spring Boot 的工作原理,可以帮助开发者更好地理解和使用 Spring Boot。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值