Spring Boot详解&项目建立
字数 2899 2025-11-18 12:06:34

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 自动配置流程

  1. Spring Boot 启动时从 /META-INF/spring.factories 获取自动配置类
  2. 通过 @ConditionalOnXXX 条件注解判断配置是否生效
  3. 导入对应的 starter 后,自动装配生效
  4. 所有自动配置在 spring-boot-autoconfigure jar 包中实现

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 启动流程

  1. 推断应用类型(普通项目或 Web 项目)
  2. 查找并加载所有可用初始化器
  3. 找出所有应用程序监听器
  4. 推断并设置 main 方法定义类
  5. 运行 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 配置文件优先级

  1. file:./config/(项目根目录下的 config 文件夹)
  2. file:./(项目根目录)
  3. classpath:/config/(类路径下的 config 文件夹)
  4. 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 静态资源目录优先级

  1. classpath:/META-INF/resources/
  2. classpath:/resources/
  3. classpath:/static/(默认)
  4. 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

九、最佳实践

  1. 遵循约定大于配置:尽量使用默认配置
  2. 合理使用 Profile:区分开发、测试、生产环境
  3. 使用 Starter 依赖:简化依赖管理
  4. 配置外部化:敏感信息通过环境变量配置
  5. 监控和健康检查:集成 Spring Boot Actuator

通过以上内容的学习和实践,可以快速掌握 Spring Boot 的核心概念和开发技巧,提高 Java Web 应用的开发效率。

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 目录结构分析 3.2 自动配置原理 3.2.1 依赖管理 Spring Boot 通过 spring-boot-dependencies 父工程管理版本依赖,引入 Spring Boot 依赖时无需指定版本。 3.2.2 启动器(Starters) 启动器是 Spring Boot 的核心概念,每个启动器对应一个功能场景: 常用启动器: 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-autoconfigure jar 包中实现 3.3 主程序分析 3.3.1 @SpringBootApplication 注解 该注解包含三个核心注解: @SpringBootConfiguration :标识为配置类 @EnableAutoConfiguration :启用自动配置 @ComponentScan :组件扫描 3.3.2 SpringApplication 启动流程 推断应用类型(普通项目或 Web 项目) 查找并加载所有可用初始化器 找出所有应用程序监听器 推断并设置 main 方法定义类 运行 Spring 应用 四、配置管理 4.1 配置文件类型 4.1.1 application.properties 4.1.2 application.yaml 注意 :YAML 语法要求 key 后必须有空格 4.2 配置文件优先级 file:./config/(项目根目录下的 config 文件夹) file:./(项目根目录) classpath:/config/(类路径下的 config 文件夹) classpath:/(类路径根目录) 4.3 多环境配置 4.3.1 Properties 方式 application.properties : application-dev.properties : 4.3.2 YAML 方式 4.4 配置属性绑定 4.4.1 @ConfigurationProperties 对应配置: 4.4.2 @Value 注解 4.4.3 JSR303 校验 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: 访问路径: /webjars/jquery/3.6.0/jquery.js 5.2 首页定制 在静态资源目录下创建 index.html 文件,访问根路径时自动显示。 5.3 模板引擎(Thymeleaf) 5.3.1 引入依赖 5.3.2 模板文件位置 classpath:/templates/ 目录下,需要通过 Controller 跳转。 5.4 Controller 注解 5.4.1 控制层注解 5.4.2 Bean 管理注解 @Component :通用组件 @Service :业务层 @Repository :数据层 @Controller :控制层 5.4.3 依赖注入注解 @Autowired :自动注入 @Resource :JSR-250 注入 @Value("${property}") :获取配置值 5.5 配置类注解 六、数据访问 6.1 JDBC 整合 6.2 Druid 数据源配置 6.2.1 引入依赖 6.2.2 配置类 6.3 MyBatis 整合 6.3.1 引入依赖 6.3.2 配置 七、开发实践 7.1 热部署配置 在 pom.xml 中添加: 7.2 调试自动配置 在 application.properties 中开启调试: 7.3 自定义 Banner 在 resources 目录下创建 banner.txt 文件自定义启动 Banner。 7.4 异常处理 Spring Boot 提供默认错误页面,也可自定义: 八、项目部署 8.1 打包部署 8.2 外部化配置 可通过命令行参数、环境变量等方式覆盖配置: 九、最佳实践 遵循约定大于配置 :尽量使用默认配置 合理使用 Profile :区分开发、测试、生产环境 使用 Starter 依赖 :简化依赖管理 配置外部化 :敏感信息通过环境变量配置 监控和健康检查 :集成 Spring Boot Actuator 通过以上内容的学习和实践,可以快速掌握 Spring Boot 的核心概念和开发技巧,提高 Java Web 应用的开发效率。