Spring Boot 详解与项目建立教学文档
一、Spring Boot 概述
1.1 Spring 框架简介
Spring 是一个轻量级的 Java 开发框架,旨在解决企业级应用开发的复杂性,通过以下四种关键策略简化开发:
- 基于 POJO 的轻量级和最小侵入性编程
- 通过 IOC 容器、依赖注入(DI)和面向接口实现松耦合
- 基于切面(AOP)和惯例进行声明式编程
- 通过切面和模板减少样板代码
1.2 Spring Boot 定位
Spring Boot 并不是用来替代 Spring 的解决方案,而是与 Spring 框架紧密结合用于提升开发者体验的工具。它以"约定大于配置"为核心思想,默认进行大量设置,多数应用只需要很少的 Spring 配置。
1.3 Spring Boot 主要优点
- 为所有 Spring 开发者提供更快的入门体验
- 开箱即用,提供各种默认配置简化项目配置
- 内嵌式容器简化 Web 项目
- 无冗余代码生成和 XML 配置要求
- 集成大量常用第三方库配置(Redis、MongoDB、Jpa 等)
二、环境准备
2.1 开发环境要求
- JDK 1.8 或更高版本(推荐 JDK 21)
- Maven 3.6.1 或更高版本
- Spring Boot 最新版
- IDEA 最新版本
2.2 项目建立注意事项
- 建立项目时确保在 Application 类同级目录下
- 如未自动导入依赖,需在 pom.xml 中手动写入
- Maven 使用 pom.xml 管理依赖,Gradle 使用 build.gradle
三、项目结构与核心原理
3.1 目录结构分析
src/
├── main/
│ ├── java/ # 源代码目录
│ ├── resources/ # 资源文件目录
│ │ ├── static/ # 静态资源
│ │ ├── templates/ # 模板文件
│ │ └── application.properties/yml # 配置文件
│ └── webapp/ # Web 应用目录
3.2 自动配置原理
3.2.1 依赖管理
Spring Boot 通过 spring-boot-dependencies 父工程管理版本依赖,引入 Spring Boot 依赖时无需指定版本。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.7</version>
</parent>
3.2.2 启动器(Starters)
启动器是 Spring Boot 的核心概念,每个启动器对应一个功能场景:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
常用启动器:
- spring-boot-starter-web:Web 应用开发
- spring-boot-starter-test:测试支持
- spring-boot-starter-data-jpa:JPA 数据访问
- spring-boot-starter-security:安全支持
3.2.3 自动配置流程
- Spring Boot 启动时从
/META-INF/spring.factories获取自动配置类 - 通过
@ConditionalOnXXX条件注解判断配置是否生效 - 导入对应的 starter 后,自动装配生效
- 所有自动配置在
spring-boot-autoconfigurejar 包中实现
3.3 主程序分析
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3.3.1 @SpringBootApplication 注解
该注解包含三个核心注解:
@SpringBootConfiguration:标识为配置类@EnableAutoConfiguration:启用自动配置@ComponentScan:组件扫描
3.3.2 SpringApplication 启动流程
- 推断应用类型(普通项目或 Web 项目)
- 查找并加载所有可用初始化器
- 找出所有应用程序监听器
- 推断并设置 main 方法定义类
- 运行 Spring 应用
四、配置管理
4.1 配置文件类型
4.1.1 application.properties
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/test
4.1.2 application.yaml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
注意:YAML 语法要求 key 后必须有空格
4.2 配置文件优先级
- file:./config/(项目根目录下的 config 文件夹)
- file:./(项目根目录)
- classpath:/config/(类路径下的 config 文件夹)
- classpath:/(类路径根目录)
4.3 多环境配置
4.3.1 Properties 方式
application.properties:
spring.profiles.active=dev
application-dev.properties:
server.port=8082
4.3.2 YAML 方式
server:
port: 8081
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: test
spring:
profiles:
active: dev
4.4 配置属性绑定
4.4.1 @ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
// getter/setter 方法
}
对应配置:
person:
name: 张三
age: 20
4.4.2 @Value 注解
@Component
public class MyComponent {
@Value("${server.port}")
private String port;
}
4.4.3 JSR303 校验
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@NotNull
private String name;
@Min(0)
@Max(150)
private int age;
}
4.4.4 松散绑定
YAML 中的 last-name 与 Java 中的 lastName 自动映射。
五、Web 开发
5.1 静态资源处理
5.1.1 静态资源目录优先级
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/(默认)
- classpath:/public/
5.1.2 WebJars 支持
通过 Maven 导入 WebJars:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.6.0</version>
</dependency>
访问路径:/webjars/jquery/3.6.0/jquery.js
5.2 首页定制
在静态资源目录下创建 index.html 文件,访问根路径时自动显示。
5.3 模板引擎(Thymeleaf)
5.3.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
5.3.2 模板文件位置
classpath:/templates/ 目录下,需要通过 Controller 跳转。
5.4 Controller 注解
5.4.1 控制层注解
@RestController // = @Controller + @ResponseBody
@RequestMapping("/user")
public class UserController {
@GetMapping("/list") // GET 请求
public List<User> list() {
return userService.findAll();
}
@PostMapping("/add") // POST 请求
public ResponseEntity addUser(@RequestBody User user) {
userService.save(user);
return ResponseEntity.ok().build();
}
@PutMapping("/update") // PUT 请求
public ResponseEntity updateUser(@RequestBody User user) {
userService.update(user);
return ResponseEntity.ok().build();
}
@DeleteMapping("/delete/{id}") // DELETE 请求
public ResponseEntity deleteUser(@PathVariable Long id) {
userService.delete(id);
return ResponseEntity.ok().build();
}
}
5.4.2 Bean 管理注解
@Component:通用组件@Service:业务层@Repository:数据层@Controller:控制层
5.4.3 依赖注入注解
@Autowired:自动注入@Resource:JSR-250 注入@Value("${property}"):获取配置值
5.5 配置类注解
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
@ConfigurationProperties(prefix = "myconfig")
public MyConfig myConfig() {
return new MyConfig();
}
}
六、数据访问
6.1 JDBC 整合
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
6.2 Druid 数据源配置
6.2.1 引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
6.2.2 配置类
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
6.3 MyBatis 整合
6.3.1 引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
6.3.2 配置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.entity
七、开发实践
7.1 热部署配置
在 pom.xml 中添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
7.2 调试自动配置
在 application.properties 中开启调试:
debug=true
7.3 自定义 Banner
在 resources 目录下创建 banner.txt 文件自定义启动 Banner。
7.4 异常处理
Spring Boot 提供默认错误页面,也可自定义:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity handleException(Exception e) {
return ResponseEntity.status(500).body("服务器内部错误");
}
}
八、项目部署
8.1 打包部署
mvn clean package
java -jar target/demo-0.0.1-SNAPSHOT.jar
8.2 外部化配置
可通过命令行参数、环境变量等方式覆盖配置:
java -jar app.jar --server.port=8085
九、最佳实践
- 遵循约定大于配置:尽量使用默认配置
- 合理使用 Profile:区分开发、测试、生产环境
- 使用 Starter 依赖:简化依赖管理
- 配置外部化:敏感信息通过环境变量配置
- 监控和健康检查:集成 Spring Boot Actuator
通过以上内容的学习和实践,可以快速掌握 Spring Boot 的核心概念和开发技巧,提高 Java Web 应用的开发效率。