当前位置: 首页 > article >正文

Spring Boot 架构入门学习指南

Spring Boot 架构入门学习指南

  • 1. 什么是 Spring Boot
  • 2. 快速入门
  • 3. 核心概念
    • 3.1 自动配置
    • 3.2 配置管理
    • 3.3 Profiles
  • 4. 数据访问
    • 4.1 使用 Spring Data JPA
  • 5. 目录结构
    • 5.1 目录结构
    • 5.2 目录及文件作用
  • 6. 拓展开发

Spring Boot 是 Spring 框架家族中的一员,由于其简洁和高效广受欢迎。本文将带你从入门到精通,逐步探索 Spring Boot 的架构及其丰富特性。

1. 什么是 Spring Boot

Spring Boot 是基于 Spring 框架的一个子项目,目的是简化 Spring 应用程序的创建、配置和部署。它通过提供预先配置的默认值和自动化的配置,减轻了繁琐的开发任务。

  • 快速开发:提供开箱即用的功能,最小化配置。
  • 微服务友好:支持微服务架构,易于部署。
  • 独立运行:支持内嵌服务器(如Tomcat、Jetty)直接运行。

2. 快速入门

2.1 环境准备

  • JDK 版本:确保安装 JDK 8 或更高版本。
  • 构建工具:可以使用 Maven 或 Gradle。

2.2 创建第一个项目

使用 Spring Initializr(https://start.spring.io/):

  1. 选择项目类型(Maven/Gradle)、Spring Boot 版本。
  2. 添加必要依赖,如 Web、JPA、H2 等。
  3. 生成项目后下载,并导入至 IDE 中。

2.3 编写 Hello World 应用

在生成的项目中,创建一个简单的 REST 控制器:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

启动应用,访问 http://localhost:8080/hello,即可在浏览器中看到返回的消息。

3. 核心概念

3.1 自动配置

Spring Boot 的自动配置装配默认的 Bean,且仅在开发者未手动定义时生效。可以使用 @SpringBootApplication 注解,它组合了 @Configuration@EnableAutoConfiguration@ComponentScan

3.2 配置管理

Spring Boot 提供多种方式进行配置:

  • application.propertiesapplication.yml:用于声明配置属性。
  • 命令行参数:在启动应用时传入。
  • 系统环境变量:从操作系统中提取。

3.3 Profiles

利用 @Profile 可以根据不同环境(开发、测试、生产)加载不同配置,从而使应用更灵活。

4. 数据访问

4.1 使用 Spring Data JPA

Spring Boot 与 Spring Data JPA 无缝集成,简化数据库操作。

  1. 添加依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    
  2. 创建实体类和存储库接口:

    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
        private String email;
    }
    
    public interface UserRepository extends JpaRepository<User, Long> {
    }
    
  3. 简单的 CRUD 操作:

    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepository;
    
        public User saveUser(User user) {
            return userRepository.save(user);
        }
    
        public List<User> findAll() {
            return userRepository.findAll();
        }
    }
    
  • Spring Boot 提供了 Spring Security,能方便地对应用进行安全控制。可以通过配置类和注解如 @EnableWebSecurity 实现用户认证、授权。
  • Spring Boot 的项目可以直接打包成可执行的 JAR 文件,通过 java -jar 命令进行部署。
  • 推荐在生产环境中使用外部化配置文件,以便在不同环境中灵活切换配置。

5. 目录结构

Spring Boot 项目的目录结构大致是一致的,尤其是通过 Spring Initializr 创建的项目。以下是典型的 Spring Boot 项目的目录树及其每个部分的作用:

5.1 目录结构

my-springboot-project/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── demo/
│   │   │               ├── DemoApplication.java
│   │   │               ├── controller/
│   │   │               ├── service/
│   │   │               ├── repository/
│   │   │               └── model/
│   │   └── resources/
│   │       ├── application.properties
│   │       └── static/
│   │       └── templates/
│   │       └── META-INF/
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── demo/
│                       └── DemoApplicationTests.java
└── pom.xml (或 build.gradle)

5.2 目录及文件作用

  1. src/main/java:

    • 用于存放源代码。根据包名组织,通常按照功能模块分层结构划分,如 controllerservicerepositorymodel 等。
  2. DemoApplication.java:

    • 包含 @SpringBootApplication 注解的主类,是应用程序的启动入口。该注解组合了 @Configuration@EnableAutoConfiguration@ComponentScan
    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    
  3. src/main/resources/:

    • application.propertiesapplication.yml
      • 用于配置应用程序属性,如数据库连接信息、服务器端口等。
    • static/:用于存放静态资源,如 HTML、CSS、JavaScript 文件。
    • templates/:用于存放模板文件,如 Thymeleaf、Mustache。
    • META-INF/:存放服务配置文件。
  4. src/test/java:

    • 用于存放测试代码。通常会有一个与主应用同包路径的测试类,用于启动应用上下文进行测试。
  5. pom.xmlbuild.gradle:

    • 用于项目构建工具 Maven 或 Gradle 的配置文件,定义项目的依赖包、构建顺序及构建插件等。

6. 拓展开发

  1. Controller 层:

    • 用于处理 HTTP 请求和返回响应。可以根据请求路径或请求方法分配不同的处理方法。
    @RestController
    @RequestMapping("/api/users")
    public class UserController {
        @Autowired
        private UserService userService;
    
        @GetMapping("/{id}")
        public ResponseEntity<User> getUserById(@PathVariable Long id) {
            return ResponseEntity.ok(userService.findById(id));
        }
    }
    
  2. Service 层:

    • 包含业务逻辑。通常是一个或多个接口和它们的实现类。
    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepository;
    
        public User findById(Long id) {
            return userRepository.findById(id).orElse(null);
        }
    }
    
  3. Repository 层:

    • 负责与数据库交互,通常使用 Spring Data JPA,则只需要定义接口即可,类似 DAO 层。
    public interface UserRepository extends JpaRepository<User, Long> {
    }
    
  4. Model 层:

    • 定义实体类,与数据库表映射关系一一对应。
    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String name;
        private String email;
    }
    
  • 添加新的功能模块:可以根据业务逻辑划分新模块,通过创建新的 Controller、Service、Repository 和 Model。
  • 添加异常处理:通过自定义异常类和组装全局异常处理器,保证应用程序的健壮性。
  • 中间件集成:集成 Redis、RabbitMQ 等中间件,可以扩展系统的缓存和消息队列机制。
  • 安全性增强:利用 Spring Security 提高应用的安全性,添加用户认证和授权机制。

在开始拓展之前,建议熟悉 Spring Boot 官方指南和相关文档,以便利用其丰富的特性来构建更复杂的应用程序。


http://www.kler.cn/news/368741.html

相关文章:

  • STM32第15章 RCC-使用HSE/HSI配置时钟
  • <<机器学习实战>>15-26节笔记:逻辑回归参数估计、梯度下降及优化、模型评价指标
  • Http 状态码 301 Permanent Rediret 302 Temporary Redirect
  • SELinux详解
  • 二十二、Python基础语法(模块)
  • python如何基于numpy pandas完成复杂的数据分析操作?
  • NameNode的HA特性和基于ZKFC的自动故障转移机制
  • 前端浏览器知识总结
  • STM32 第18章 SysTick--系统定时器
  • kafka-console-ui的简介及安装使用
  • OceanMind海睿思受邀参加中国信通院2024数据要素发展大会
  • 使用 Spring Doc 为 Spring REST API 生成 OpenAPI 3.0 文档
  • Web做题思路
  • python实现数据库两个表之间的更新操作(模糊匹配)示例
  • Django-cookie,session
  • 工作中用到的 Linux 总结(持续更新中...)
  • Word 删除空白页:亲测有效的方法
  • 【JavaEE】【多线程】线程池
  • 理解BERT的词向量及其初始化参数的一致性
  • Redis 集群 总结
  • 单片机中的BootLoader(使用汇编指令进行跳转)
  • Linux系列-yum软件安装包
  • 一次调整prompt的过程
  • docker常用命令整理
  • RabbitMQ几个核心概念
  • 通过页面添加国际化数据,实现vue的国际化