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 应用的开发效率。

相似文章
相似文章
 全屏