1-1 Spring Boot 简介
概念解析
什么是 Spring Boot?
Spring Boot 是 Pivotal 团队基于 Spring 框架开发的开箱即用的快速应用开发框架,旨在简化 Spring 应用的初始搭建和开发过程。
核心特性
| 特性 | 说明 |
|---|---|
| 自动配置 | 根据依赖自动配置 Bean |
| 起步依赖 | 通过 starter 简化依赖管理 |
| 内嵌容器 | 内置 Tomcat/Jetty/Undertow |
| 健康检查 | 提供应用健康监控 |
| 外部化配置 | 支持多种配置文件格式 |
Spring Boot vs 传统 SSM
| 对比项 | 传统 SSM | Spring Boot |
|---|---|---|
| 配置方式 | XML 大量配置 | YAML/Properties 少量配置 |
| 依赖管理 | 手动管理版本 | 起步依赖自动管理 |
| 部署方式 | WAR 包到外部容器 | JAR 包内嵌容器 |
| 开发效率 | 配置繁琐 | 开箱即用 |
代码示例
创建一个 Spring Boot 项目
1. Maven pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 继承 Spring Boot 父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>springboot-demo</artifactId>
<version>1.0.0</version>
<properties>
<java.version>17</java.version>
</properties>
<!-- Web 开发起步依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- Maven 打包插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 启动类
package com.example.demo;
@SpringBootApplication
public class SpringBootApplication {
public static void main(String[] args) {
// 启动 Spring Boot 应用
SpringApplication.run(SpringBootApplication.class, args);
}
}
3. 配置文件 application.yml
server:
port: 8080
servlet:
context-path: /api
spring:
application:
name: springboot-demo
4. 编写 Controller
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public Result<User> getUser(@PathVariable Long id) {
return Result.success(new User(id, "张三", 25));
}
}
常见坑点
⚠️ 坑 1:启动类位置问题
问题:Component scan 找不到 Bean
原因:启动类默认只扫描同包及子包下的组件
解决:
// 方式一:确保启动类在最外层
// com.example.demo.SpringBootApplication
// ↓
// com.example.demo.controller.UserController ✓
// 方式二:指定扫描路径
@SpringBootApplication(scanBasePackages = "com.example")
public class SpringBootApplication { }
⚠️ 坑 2:主类与配置文件同名冲突
问题:启动时报找不到 main class
解决:确保 pom.xml 中主类配置正确
<properties>
<start-class>com.example.demo.SpringBootApplication</start-class>
</properties>
面试题
Q1:Spring Boot 的核心注解是哪个?
参考答案:
@SpringBootApplication 是 Spring Boot 的核心注解,它是一个组合注解,包含三个主要注解:
@SpringBootApplication
// 等价于
@Configuration // 标识为配置类
@EnableAutoConfiguration // 启用自动配置
@ComponentScan // 组件扫描
Q2:Spring Boot 为什么能零配置运行?
参考答案:
- 起步依赖:starter 会传递引入所有必要依赖
- 自动配置:Spring Boot 根据 classpath 中的 jar 自动配置
- 约定优于配置:遵循默认约定,减少显式配置
- 内嵌容器:无需部署到外部服务器
Q3:Spring Boot 和 Spring MVC 的区别?
参考答案:
| 维度 | Spring MVC | Spring Boot |
|---|---|---|
| 定位 | Web 框架 | 应用框架 |
| 配置 | 大量 XML/Java Config | 自动配置 |
| 依赖 | 手动引入 | 起步依赖 |
| 部署 | WAR 到 Tomcat | JAR 内嵌容器 |
| 监控 | 无内置 | Actuator 端点 |
关系:Spring Boot 是 Spring 生态的上层封装,底层仍然是 Spring MVC