springBoot的框架流程
Spring Boot 是基于 Spring 框架的 “约定优于配置” 的快速开发工具,通过自动化配置和嵌入式容器简化了 Spring 应用的搭建和部署。以下是 Spring Boot 的核心工作流程及关键机制详解:
1. Spring Boot 核心流程图
2. 详细启动流程解析
阶段 1:应用启动
-
入口点:
-
开发者执行
main()方法,调用SpringApplication.run(Application.class, args)。 -
示例:
@SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); // 启动Spring Boot } }
-
-
加载配置:
-
@SpringBootApplication组合了以下注解:-
@Configuration:标记为配置类。 -
@ComponentScan:自动扫描当前包及子包的组件(@Controller、@Service等)。 -
@EnableAutoConfiguration:启用自动配置机制。
-
-
阶段 2:自动配置(AutoConfiguration)
-
依赖分析:
-
Spring Boot 根据项目的
pom.xml或build.gradle中的 Starter 依赖(如spring-boot-starter-web)推断需要配置的组件(如 Spring MVC、Tomcat、DataSource)。
-
-
条件化装配:
-
通过
@Conditional系列注解(如@ConditionalOnClass、@ConditionalOnMissingBean)按需加载配置。 -
例如:如果类路径下有
HikariCP,则自动配置数据源。
-
-
加载默认配置:
-
Spring Boot 的
spring-boot-autoconfigure包中包含大量META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,定义自动配置规则。
-
阶段 3:启动嵌入式服务器
-
服务器初始化:
-
根据依赖的 Starter(如
spring-boot-starter-web默认使用 Tomcat),启动嵌入式服务器。 -
服务器端口默认
8080,可通过application.properties修改:server.port=9090
-
-
发布应用上下文:
-
Spring 容器(
ApplicationContext)初始化完成后,触发ApplicationReadyEvent事件。
-
3. 处理HTTP请求(Spring MVC 流程)
Spring Boot 的 Web 模块基于 Spring MVC,流程与传统 Spring MVC 一致,但配置更简化:
-
请求到达:由嵌入式服务器(如 Tomcat)接收并转发给
DispatcherServlet。 -
路由处理:通过
@RestController或@Controller处理请求。 -
返回响应:支持 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> 默认值)。 -
示例:
# application.properties spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root
(4) Actuator(监控与管理)
-
提供端点(如
/health、/metrics)监控应用状态:management.endpoints.web.exposure.include=*
5. 代码示例
快速创建REST API
@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) {}
自定义配置
@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: 如何排除自动配置?
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApp {
// 排除数据源自动配置
}
Q2: 如何自定义Banner?
-
在
resources下添加banner.txt文件,启动时显示自定义图案。
Q3: 如何打包为可执行JAR?
-
使用 Maven/Gradle 插件:
<!-- Maven --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>运行:
java -jar myapp.jar
总结
Spring Boot 通过 自动配置 + 嵌入式容器 + Starter 依赖 极大简化了 Spring 应用的开发。其核心流程为:
-
启动阶段:加载自动配置,初始化容器。
-
运行阶段:处理请求(基于 Spring MVC),返回响应。
-
部署阶段:打包为独立 JAR,直接运行。
掌握 Spring Boot 的自动配置机制和 Starter 设计思想,能高效构建企业级应用。


浙公网安备 33010602011771号