springBoot的框架流程

Spring Boot 是基于 Spring 框架的 “约定优于配置” 的快速开发工具,通过自动化配置和嵌入式容器简化了 Spring 应用的搭建和部署。以下是 Spring Boot 的核心工作流程及关键机制详解:


1. Spring Boot 核心流程图

image

 

 
 
 

2. 详细启动流程解析

阶段 1:应用启动

  1. 入口点:

    • 开发者执行 main() 方法,调用 SpringApplication.run(Application.class, args)

    • 示例:

      java
       
      @SpringBootApplication
      public class MyApp {
          public static void main(String[] args) {
              SpringApplication.run(MyApp.class, args); // 启动Spring Boot
          }
      }
  2. 加载配置:

    • @SpringBootApplication 组合了以下注解:

      • @Configuration:标记为配置类。

      • @ComponentScan:自动扫描当前包及子包的组件(@Controller@Service等)。

      • @EnableAutoConfiguration:启用自动配置机制。

阶段 2:自动配置(AutoConfiguration)

  1. 依赖分析:

    • Spring Boot 根据项目的 pom.xml 或 build.gradle 中的 Starter 依赖(如 spring-boot-starter-web)推断需要配置的组件(如 Spring MVC、Tomcat、DataSource)。

  2. 条件化装配:

    • 通过 @Conditional 系列注解(如 @ConditionalOnClass@ConditionalOnMissingBean)按需加载配置。

    • 例如:如果类路径下有 HikariCP,则自动配置数据源。

  3. 加载默认配置:

    • Spring Boot 的 spring-boot-autoconfigure 包中包含大量 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件,定义自动配置规则。

阶段 3:启动嵌入式服务器

  1. 服务器初始化:

    • 根据依赖的 Starter(如 spring-boot-starter-web 默认使用 Tomcat),启动嵌入式服务器。

    • 服务器端口默认 8080,可通过 application.properties 修改:

      properties
       
      server.port=9090
  2. 发布应用上下文:

    • Spring 容器(ApplicationContext)初始化完成后,触发 ApplicationReadyEvent 事件。


3. 处理HTTP请求(Spring MVC 流程)

Spring Boot 的 Web 模块基于 Spring MVC,流程与传统 Spring MVC 一致,但配置更简化:

  1. 请求到达:由嵌入式服务器(如 Tomcat)接收并转发给 DispatcherServlet

  2. 路由处理:通过 @RestController 或 @Controller 处理请求。

  3. 返回响应:支持 JSON(@ResponseBody)、视图渲染(Thymeleaf)等。


4. 核心特性与组件

(1) Starter 依赖

  • 作用:预置依赖组合,避免手动添加多个库。

  • 示例:

    • spring-boot-starter-web:包含 Spring MVC + Tomcat。

    • spring-boot-starter-data-jpa:包含 Hibernate + JPA。

(2) 自动配置(AutoConfiguration)

  • 原理:通过 spring.factories 文件定义配置类,按条件装配 Bean。

  • 覆盖配置:自定义 @Bean 可覆盖自动配置。

(3) 外部化配置

  • 优先级:支持多来源配置(命令行 > application.properties > 默认值)。

  • 示例:

    properties
     
    # application.properties
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root

(4) Actuator(监控与管理)

  • 提供端点(如 /health/metrics)监控应用状态:

    properties
     
    management.endpoints.web.exposure.include=*

5. 代码示例

快速创建REST API

java
 
@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }

    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "Alice");
    }
}

// 实体类
public record User(Long id, String name) {}

自定义配置

java
 
@Configuration
public class MyConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

6. 与传统 Spring MVC 的区别

特性Spring Boot传统 Spring MVC
配置方式 约定优于配置,自动装配 手动配置 XML 或 Java Config
服务器 嵌入式容器(Tomcat/Jetty 需外部部署(如独立 Tomcat)
依赖管理 Starter 依赖简化包管理 需手动添加所有依赖
启动速度 快速启动(内嵌容器) 依赖外部容器部署

7. 常见问题

Q1: 如何排除自动配置?

java
 
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApp {
    // 排除数据源自动配置
}

Q2: 如何自定义Banner?

  • 在 resources 下添加 banner.txt 文件,启动时显示自定义图案。

Q3: 如何打包为可执行JAR?

  • 使用 Maven/Gradle 插件:

    xml
     
    <!-- Maven -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    运行:

    bash
     
    java -jar myapp.jar

总结

Spring Boot 通过 自动配置 + 嵌入式容器 + Starter 依赖 极大简化了 Spring 应用的开发。其核心流程为:

  1. 启动阶段:加载自动配置,初始化容器。

  2. 运行阶段:处理请求(基于 Spring MVC),返回响应。

  3. 部署阶段:打包为独立 JAR,直接运行。

掌握 Spring Boot 的自动配置机制和 Starter 设计思想,能高效构建企业级应用。

posted @ 2025-08-06 13:42  苹果芒  阅读(56)  评论(0)    收藏  举报