当前位置: 首页 > news >正文

Spring Boot 简介与快速搭建及启动流程详解

文章目录

    • 一、Spring Boot 概述及选择原因
      • (一)什么是 Spring Boot
      • (二)为何选择 Spring Boot
    • 二、使用 Spring Initializr 快速创建 Spring Boot 项目
      • (一)步骤
      • (二)导入项目到 IDE
    • 三、项目结构分析
    • 四、Spring Boot 项目的启动流程
      • (一)启动入口
      • (二)创建 `SpringApplication` 实例
      • (三)运行 `SpringApplication` 实例
        • 1. 准备环境
        • 2. 创建 `ApplicationContext`
        • 3. 准备 `ApplicationContext`
        • 4. 加载源配置
        • 5. 刷新 `ApplicationContext`
        • 6. 发布应用启动完成事件
      • (四)异常处理

一、Spring Boot 概述及选择原因

(一)什么是 Spring Boot

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的配置方式,使得开发人员可以摆脱传统 Spring 项目中繁琐的 XML 配置,从而更加专注于业务逻辑的开发。

(二)为何选择 Spring Boot

  1. 简化配置:Spring Boot 采用了约定大于配置的原则,提供了大量的默认配置。例如,在使用 Spring Boot 开发 Web 应用时,只需要添加相应的依赖,Spring Boot 就会自动配置好嵌入式的 Tomcat 服务器,无需手动配置服务器的启动参数和部署信息。
  2. 快速开发:Spring Boot 提供了丰富的 Starter 依赖,这些 Starter 是一组经过精心挑选的依赖集合。比如,要开发一个基于 Spring Data JPA 的数据库应用,只需要添加 spring - boot - starter - data - jpa 依赖,Spring Boot 会自动引入 JPA、Hibernate 等相关依赖,大大节省了开发时间。
  3. 易于部署:Spring Boot 支持将应用打包成可执行的 JAR 或 WAR 文件,其中包含了所有的依赖和嵌入式服务器。可以直接通过 java - jar 命令来运行应用,无需额外的服务器环境配置。
  4. 生产就绪:Spring Boot 提供了一系列的生产级特性,如健康检查、指标监控、外部化配置等。例如,通过添加 spring - boot - starter - actuator 依赖,可以方便地对应用的运行状态进行监控和管理。

二、使用 Spring Initializr 快速创建 Spring Boot 项目

(一)步骤

  1. 访问 Spring Initializr 网站:打开 Spring Initializr 网站。
  2. 项目配置
    • Project:选择项目类型,通常选择 Maven ProjectGradle Project,这里以 Maven Project 为例。
    • Language:选择编程语言,如 Java
    • Spring Boot:选择合适的 Spring Boot 版本。
    • Group:填写项目的组名,通常是公司或组织的域名倒序,如 com.example
    • Artifact:填写项目的名称,如 demo
    • Dependencies:添加项目所需的依赖,例如,如果要开发一个简单的 Web 应用,可以添加 Spring Web 依赖。
  3. 生成项目:点击 Generate 按钮,Spring Initializr 会生成一个压缩包,下载并解压到本地。

(二)导入项目到 IDE

以 IntelliJ IDEA 为例:

  1. 打开 IntelliJ IDEA,选择 File -> New -> Project from Existing Sources
  2. 选择解压后的项目文件夹,点击 OK
  3. 在弹出的对话框中选择 Import project from external model,选择 Maven,然后按照向导完成项目导入。

三、项目结构分析

使用 Spring Initializr 生成的 Maven 项目的基本结构如下:

demo
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               └── DemoApplication.java
│   │   └── resources
│   │       ├── application.properties
│   │       ├── static
│   │       └── templates
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── demo
│                       └── DemoApplicationTests.java
└── pom.xml
  • src/main/java:存放 Java 源代码。
  • src/main/resources:存放项目的资源文件。
    • application.properties:Spring Boot 的配置文件,用于配置应用的各种参数,如数据库连接信息、服务器端口等。
    • static:用于存放静态资源,如 HTML、CSS、JavaScript 等。
    • templates:用于存放模板文件,如 Thymeleaf 模板。
  • src/test/java:存放测试代码。
  • pom.xml:Maven 项目的配置文件,用于管理项目的依赖和构建信息。

四、Spring Boot 项目的启动流程

(一)启动入口

Spring Boot 项目的启动通常从带有 @SpringBootApplication 注解的主类中的 main 方法开始。示例代码如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

在上述代码中,SpringApplication.run() 方法是启动的核心,它会调用一系列方法来完成项目的启动。

(二)创建 SpringApplication 实例

当调用 SpringApplication.run() 方法时,首先会创建一个 SpringApplication 实例。在创建过程中,会完成以下操作:

  • 推断应用类型:判断应用是普通的非 Web 应用、Servlet Web 应用还是 Reactive Web 应用。
  • 查找并加载初始化器(ApplicationContextInitializer:初始化器用于在 ApplicationContext 刷新之前对其进行定制化配置。
  • 查找并加载监听器(ApplicationListener:监听器可以监听 Spring Boot 应用的各种生命周期事件,如应用启动、停止等。
  • 推断主类:确定包含 main 方法的主类。

(三)运行 SpringApplication 实例

创建 SpringApplication 实例后,会调用其 run() 方法,该方法会执行以下步骤:

1. 准备环境
  • 创建并配置 EnvironmentEnvironment 接口用于表示应用运行的环境,包括系统属性、环境变量、配置文件等。Spring Boot 会根据不同的应用类型(如 Web 应用或非 Web 应用)创建相应的 Environment 实例,并加载配置属性。
  • 发布 ApplicationEnvironmentPreparedEvent 事件:通知所有监听器环境已经准备好。
2. 创建 ApplicationContext
  • 根据应用类型创建 ApplicationContext 实例
    • 对于 Servlet Web 应用,通常会创建 AnnotationConfigServletWebServerApplicationContext 实例。
    • 对于 Reactive Web 应用,会创建 AnnotationConfigReactiveWebServerApplicationContext 实例。
    • 对于非 Web 应用,会创建 AnnotationConfigApplicationContext 实例。
3. 准备 ApplicationContext
  • 设置 EnvironmentApplicationContext:将之前创建和配置好的 Environment 注入到 ApplicationContext 中。
  • 应用初始化器(ApplicationContextInitializer:依次调用之前加载的初始化器,对 ApplicationContext 进行进一步的定制化配置。
  • 发布 ApplicationContextInitializedEvent 事件:通知所有监听器 ApplicationContext 已经初始化完成。
4. 加载源配置
  • 扫描并注册组件:根据 @SpringBootApplication 注解(包含 @ComponentScan),Spring Boot 会扫描指定包及其子包下的所有带有 @Component@Service@Repository@Controller 等注解的类,并将它们注册到 ApplicationContext 中。
  • 加载自动配置类@SpringBootApplication 注解包含 @EnableAutoConfiguration,它会根据类路径下的依赖和配置,自动加载合适的自动配置类。这些自动配置类会根据条件判断是否生效,从而为应用提供默认的配置。
5. 刷新 ApplicationContext
  • 创建并初始化 Bean:Spring 容器会根据之前注册的组件和配置,创建和初始化所有的 Bean。在这个过程中,会处理 Bean 的依赖注入、AOP 代理等操作。
  • 启动嵌入式服务器(如果是 Web 应用):对于 Web 应用,Spring Boot 会启动嵌入式服务器(如 Tomcat、Jetty 等),并将 ApplicationContext 注册到服务器中。
6. 发布应用启动完成事件
  • 发布 ApplicationStartedEvent 事件:表示应用已经成功启动。
  • 调用 CommandLineRunnerApplicationRunner 接口的实现类:如果项目中存在实现了 CommandLineRunnerApplicationRunner 接口的类,Spring Boot 会在应用启动完成后调用它们的 run() 方法,用于执行一些初始化任务。
  • 发布 ApplicationReadyEvent 事件:表示应用已经准备好接受请求。

(四)异常处理

在整个启动过程中,如果发生异常,Spring Boot 会发布 ApplicationFailedEvent 事件,通知所有监听器应用启动失败,并进行相应的异常处理。

综上所述,Spring Boot 凭借其简化配置、快速开发、易于部署和生产就绪等优势,成为了开发 Spring 应用的首选框架。通过 Spring Initializr 可以快速创建项目,了解项目结构和启动流程则有助于开发者更好地理解和运用 Spring Boot 进行项目开发。

相关文章:

  • 剑指 Offer II 041. 滑动窗口的平均值
  • 用pytest进行单元测试(1)
  • SpringBoot @ConfigurationProperties 注解使用
  • 2025.3.3
  • 聊聊学习之数据-信息-知识-洞见-智慧-影响力
  • 【PTA】1019 数字黑洞
  • 绘制思维导图画布选型
  • 【OMCI实践】omci.lua脚本文件(独家分享)
  • C# IComparer<T> 使用详解
  • Web自动化中多浏览器并发
  • IO的概念和标准IO函数
  • 用Python+Flask打造可视化武侠人物关系图生成器:从零到一的实战全记录
  • 实训任务1.3 使用eNSP搭建基础网络
  • 如何解析API返回的JSON数据?
  • c++上课题目
  • GEE:计算长时间序列NPP与NDVI之间的相关系数
  • Vue3 TransitionGroup组件深入解析:结合Element Plus实践指南
  • iOS逆向工程专栏 第13篇:iOS动态分析基础
  • golang实现读取excel文件并转换为JSON格式
  • 51单片机编程学习笔记——74HC138译码器
  • 南京航空航天大学启动扁平化改革:管理岗规模控制在20%,不再统一设科级机构
  • 打造沪派水乡的“湿意”,上海正在保护营造一批湿地空间
  • 卡尼领导的加拿大自由党在联邦众议院选举中获胜
  • 一季度全国城镇新增就业308万人
  • 十大券商看后市|A股风险偏好有望边际改善,市场仍处黄金坑
  • 热点问答|第三轮间接谈判结束,美伊分歧还有多大?