杰瑞科技汇

Springboard教程适合零基础学习吗?

Spring Boot 全面教程:从入门到实战

Spring Boot 是由 Pivotal 团队开发的一个全新框架,其设计目的是为了简化 Spring 应用的初始搭建以及开发过程,它使用了“约定优于配置”的理念,让你能快速、轻松地创建和运行生产级别的 Spring 应用。

Springboard教程适合零基础学习吗?-图1
(图片来源网络,侵删)

第一部分:Spring Boot 核心概念

在学习具体操作前,理解以下几个核心概念至关重要。

什么是 Spring Boot?

想象一下,在没有 Spring Boot 之前,创建一个 Spring Web 应用需要:

  • 手动配置 XML 或 Java Config 来定义 Bean。
  • 手动配置数据源、事务管理器等。
  • 手动集成 Web 服务器(如 Tomcat)。

而 Spring Boot 通过以下方式简化了这一切:

  • 自动配置:根据你项目中引入的依赖(JAR 包),Spring Boot 会自动为你配置好大部分常见的 Bean,只要你在 pom.xml 中引入了 spring-boot-starter-web,Tomcat 服务器和 DispatcherServlet 就会自动配置好。
  • 起步依赖:Spring Boot 提供了一系列“起步依赖”(Starters),spring-boot-starter-web,这个依赖本身已经帮你打包好了创建 Web 应用所需的所有常用依赖(如 Spring MVC, Tomcat, Jackson 等),你无需再手动管理一个个的版本和依赖关系。
  • 内嵌服务器:Spring Boot 可以将 Tomcat、Jetty 或 Undertow 服务器“内嵌”到你的应用程序中,这意味着你不需要将应用打包成 WAR 文件再部署到外部服务器,可以直接运行一个 JAR 文件来启动应用。
  • 无需代码生成和 XML 配置:Spring Boot 极大地减少了样板代码,大部分配置都可以通过简单的注解和属性文件完成。

核心优势

  • 快速开发:几分钟内就能搭建并运行一个 Spring 应用。
  • 独立运行:可以轻松地创建一个独立的、生产级别的 Spring 应用,并以 JAR 的形式运行。
  • 微服务友好:Spring Boot 与 Spring Cloud 完美结合,是构建微服务的首选框架。
  • 监控方便:提供了 Actuator 组件,可以轻松监控应用的健康状况、指标等。

第二部分:环境准备

在开始编码之前,确保你的开发环境已经准备就绪。

Springboard教程适合零基础学习吗?-图2
(图片来源网络,侵删)
  1. Java Development Kit (JDK): Spring Boot 需要 Java 8 或更高版本,推荐使用 JDK 11 或 17(LTS 版本)。
    • 验证: 在终端/命令行中运行 java -version
  2. 构建工具: Maven 或 Gradle,本教程以 Maven 为例。
    • 验证: 在终端/命令行中运行 mvn -v
  3. IDE: IntelliJ IDEA (社区版或专业版) 或 Eclipse,IntelliJ IDEA 对 Spring Boot 的支持非常好,强烈推荐。
  4. API 文档工具: Postman 或 curl,用于测试我们开发的 API。

第三部分:创建第一个 Spring Boot 项目

我们将使用最简单的方式——Spring Initializr 来创建项目。

使用 Spring Initializr (Web界面)

  1. 访问 https://start.spring.io/
  2. Project: 选择 Maven ProjectGradle Project (这里选 Maven)。
  3. Language: Java
  4. Spring Boot: 选择一个最新的稳定版本(如 3.x.x)。
  5. Project Metadata:
    • Group: com.example
    • Artifact: demo
    • Name: demo
    • Packaging: Jar
    • Java: 选择你的 JDK 版本
  6. Dependencies: 这是最关键的一步,在搜索框中输入并添加以下依赖:
    • Spring Web: 用于构建 Web 应用,包含 Spring MVC 和 Tomcat。
    • Spring Boot DevTools: 提供开发时的便利功能,如自动重启。
    • Lombok: (可选,但强烈推荐) 简化 Java 代码,自动生成 getter, setter, toString 等。
  7. 点击 "GENERATE" 按钮,它会下载一个 .zip 文件。
  8. 解压下载的 ZIP 文件,并用你的 IDE 打开这个项目。

项目结构解析

打开项目后,你会看到类似下面的结构:

demo/
├── pom.xml                 // Maven 依赖管理文件
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── demo/
│   │   │               └── DemoApplication.java  // 应用程序的启动类
│   │   └── resources/
│   │       ├── application.properties            // Spring Boot 的核心配置文件
│   │       └── static/
│   │       └── templates/
│   └── test/
│       └── java/
└── ... (其他文件)
  • pom.xml: 定义了项目依赖,比如我们刚才选择的 spring-boot-starter-web
  • DemoApplication.java: 这是 Spring Boot 应用的入口,你只需要运行这个类的 main 方法,应用就会启动。
  • application.properties: 用于配置 Spring Boot 应用,可以修改端口号 server.port=8081

第四部分:编写你的第一个 REST API

我们来创建一个简单的 "Hello, World!" API。

创建 Controller

src/main/java/com/example/demo 目录下,新建一个名为 HelloController.java 的文件。

Springboard教程适合零基础学习吗?-图3
(图片来源网络,侵删)
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// @RestController 是一个复合注解,相当于 @Controller + @ResponseBody
// 它告诉 Spring 这个类中的所有方法返回的数据都直接作为 HTTP 响应体的内容。
@RestController
public class HelloController {
    // @GetMapping 注解将 HTTP GET 请求映射到该方法上。
    // "/hello" 是请求的路径。
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}

运行并测试

  1. 运行应用: 在 IDE 中找到 DemoApplication.java 文件,右键点击并选择 "Run 'DemoApplication.main()'"。
  2. 查看日志: 你会在控制台看到 Spring Boot 启动的日志,其中会显示 Tomcat started on port(s): 8080 (http) 等信息,默认端口是 8080。
  3. 测试 API:
    • 打开浏览器,访问 http://localhost:8080/hello
    • 或者使用 Postman 或 curl 命令:
      curl http://localhost:8080/hello
    • 你将看到响应:Hello, Spring Boot!

恭喜!你已经成功创建了你的第一个 Spring Boot API!


第五部分:构建一个完整的 CRUD API

我们构建一个功能更完整的 API,实现对一个“用户”资源的增删改查。

创建数据模型

创建一个 User 类来表示用户实体。

// src/main/java/com/example/demo/User.java
package com.example.demo;
import lombok.Data;
@Data // Lombok 注解,自动生成 getter, setter, toString, equals, hashCode
public class User {
    private Long id;
    private String name;
    private String email;
}

创建数据访问层

为了简化,我们不使用数据库,而是用一个内存中的 List 来存储数据。

// src/main/java/com/example/demo/UserRepository.java
package com.example.demo;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Repository // 标记这是一个数据访问层的 Bean
public class UserRepository {
    private final List<User> users = new ArrayList<>();
    private Long nextId = 1L;
    public List<User> findAll() {
        return users;
    }
    public Optional<User> findById(Long id) {
        return users.stream().filter(u -> u.getId().equals(id)).findFirst();
    }
    public User save(User user) {
        user.setId(nextId++);
        users.add(user);
        return user;
    }
    public void deleteById(Long id) {
        users.removeIf(u -> u.getId().equals(id));
    }
}

创建服务层

服务层用于封装业务逻辑。

// src/main/java/com/example/demo/UserService.java
package com.example.demo;
import org.springframework.stereotype.Service;
import java.util.List;
@Service // 标记这是一个服务层的 Bean
public class UserService {
    private final UserRepository userRepository;
    // 使用构造器注入依赖,这是 Spring 推荐的方式
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
    public User createUser(User user) {
        return userRepository.save(user);
    }
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

创建控制器

我们创建一个 UserController 来暴露这些业务操作为 REST API。

// src/main/java/com/example/demo/UserController.java
package com.example.demo;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users") // 为这个控制器下的所有路径添加前缀
public class UserController {
    private final UserService userService;
    public UserController(UserService userService) {
        this.userService = userService;
    }
    // GET /api/users -> 获取所有用户
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
    // GET /api/users/1 -> 根据 ID 获取单个用户
    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.getUserById(id);
        if (user != null) {
            return ResponseEntity.ok(user); // 返回 200 OK 和用户数据
        } else {
            return ResponseEntity.notFound().build(); // 返回 404 Not Found
        }
    }
    // POST /api/users -> 创建一个新用户
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User createdUser = userService.createUser(user);
        return new ResponseEntity<>(createdUser, HttpStatus.CREATED); // 返回 201 Created
    }
    // DELETE /api/users/1 -> 根据 ID 删除用户
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        User user = userService.getUserById(id);
        if (user != null) {
            userService.deleteUser(id);
            return ResponseEntity.noContent().build(); // 返回 204 No Content
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

测试 CRUD API

重新运行 DemoApplication.java,然后使用 Postman 或 curl 进行测试:

  • 创建用户 (POST)

    • URL: http://localhost:8080/api/users
    • Method: POST
    • Body (raw, JSON):
      {
          "name": "Alice",
          "email": "alice@example.com"
      }
    • 响应 (201 Created):
      {
          "id": 1,
          "name": "Alice",
          "email": "alice@example.com"
      }
  • 获取所有用户 (GET)

    • URL: http://localhost:8080/api/users
    • Method: GET
    • 响应 (200 OK):
      [
          {
              "id": 1,
              "name": "Alice",
              "email": "alice@example.com"
          }
      ]
  • 获取单个用户 (GET)

    • URL: http://localhost:8080/api/users/1
    • Method: GET
    • 响应 (200 OK):
      {
          "id": 1,
          "name": "Alice",
          "email": "alice@example.com"
      }
  • 删除用户 (DELETE)

    • URL: http://localhost:8080/api/users/1
    • Method: DELETE
    • 响应 (204 No Content)

第六部分:进阶主题

当你掌握了基础后,可以探索以下更高级的主题:

  1. 集成数据库

    • JPA (Java Persistence API): 引入 spring-boot-starter-data-jpa 和数据库驱动(如 spring-boot-starter-data-jpa + H2 DatabaseMySQL Driver)。
    • MyBatis: 另一个流行的持久层框架。
    • Spring Data JPA: 这是 Spring 对 JPA 的封装,让你无需编写任何 SQL 代码就能完成数据库操作,只需定义一个继承 JpaRepository 的接口即可。
  2. 使用模板引擎

    • Thymeleaf: 用于在服务器端渲染 HTML 页面,构建传统的 Web 应用。
    • 引入 spring-boot-starter-thymeleaf
  3. 安全控制

    • Spring Security: 用于认证和授权。
    • 引入 spring-boot-starter-security,可以快速实现登录、角色控制等功能。
  4. 配置管理

    • application.yml: YAML 格式的配置文件,比 .properties 更结构化。
    • 多环境配置: 创建 application-dev.properties, application-prod.properties 等,通过 spring.profiles.active 来激活。
  5. 构建可执行 JAR

    • pom.xml 中确保打包方式为 jar
    • 运行 mvn clean package
    • target 目录下会生成一个 .jar 文件,可以通过 java -jar demo.jar 命令直接运行。

第七部分:学习资源推荐

Spring Boot 通过其“约定优于配置”的理念和丰富的自动配置功能,极大地简化了 Java Web 应用的开发,从创建第一个 "Hello, World" API 到构建完整的 CRUD 应用,你已经踏上了学习 Spring Boot 的正确道路,下一步,就是动手实践,并逐步探索数据库集成、安全、微服务等更高级的主题,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇