Spring Boot 架构

简介

Spring Boot 是一个用于构建独立、生产级别的 Spring 应用的框架。它简化了 Spring 应用的开发过程,提供了一种快速构建可部署应用的方式。Spring Boot 提供了自动配置、约定优于配置、起步依赖等特性,使得开发者可以更加专注于业务逻辑的实现。

Spring Boot 特性

自动配置

Spring Boot 根据应用的类路径和配置文件来自动配置 Spring 应用。它根据包含的依赖和配置的属性来推断和配置 Spring Bean,以及其他 Spring 相关的配置。

例如,当我们引入 Spring Boot Web Starter 依赖时,Spring Boot 会自动配置一个内嵌 Servlet 容器(如 Tomcat、Jetty 等),并提供默认的 Servlet 和 Filter。

// Spring Boot Web Starter 依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

起步依赖

Spring Boot 提供了一系列的起步依赖,用于快速集成常用的第三方库和框架。起步依赖是一种特殊的 Maven 依赖,它可以引入一组相关的依赖,避免了手动配置每个依赖的繁琐过程。

例如,我们可以使用 spring-boot-starter-data-jpa 起步依赖来快速集成 Spring Data JPA。它会自动引入与 JPA 相关的依赖,以及配置必要的 Bean。

// Spring Boot Data JPA Starter 依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

约定优于配置

Spring Boot 推崇约定优于配置的原则,通过默认的配置和约定来减少项目的配置量。它提供了一组默认的配置规则,使得开发者可以快速开始项目的开发。

例如,Spring Boot 默认使用 /static/public/resources/META-INF/resources 目录作为静态资源的存放位置。只需将静态资源文件放置在这些目录下,即可通过 URL 访问。

健康检查

Spring Boot 提供了健康检查的功能,可以轻松了解应用的运行状态。通过访问 /actuator/health 路径,可以查看应用的健康状况。

// 添加 Actuator 依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

// 配置开启健康检查
management.endpoint.health.show-details=always

示例应用

下面我们来创建一个简单的 Spring Boot 应用,演示其基本用法。我们将实现一个简单的用户管理系统,包括用户的增删改查功能。

创建项目

首先,我们需要创建一个 Spring Boot 项目。可以使用 Spring Initializer(

选择相关的依赖,如 Web、JPA、Thymeleaf 等,并下载生成的项目包。

定义实体类

src/main/java/com/example/demo/entity/User.java 中定义一个 User 实体类,表示用户信息。

package com.example.demo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private Integer age;

    // 省略 getter 和 setter 方法
}

创建控制器

src/main/java/com/example/demo/controller/UserController.java 中创建一个 UserController 类,处理用户相关的请求。

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("")