Spring 框架入门:从零开始构建你的第一个应用

1. 引言

Spring 是 Java 领域最受欢迎的企业级应用开发框架之一。它通过提供全面的编程和配置模型,简化了企业级 Java 应用的开发,使其更加模块化、可测试和可维护。无论是构建微服务、Web 应用还是数据访问层,Spring 都提供了强大的支持。

本文将带你从零开始,了解 Spring 的核心概念,并动手搭建你的第一个 Spring Boot 应用。

2. Spring 核心概念

在深入代码之前,理解 Spring 的几个核心概念至关重要:

  • 控制反转 (IoC):这是 Spring 的基石。传统上,对象自己负责创建和管理其依赖。而在 IoC 模式下,这个责任被转移给了"容器"(Spring IoC 容器)。你只需定义好对象(Bean)及其依赖关系,容器负责实例化、组装和管理它们的生命周期。
  • 依赖注入 (DI):这是实现 IoC 的一种具体方式。Spring 容器通过构造函数、Setter 方法或字段直接将依赖对象"注入"到目标对象中,而不是让目标对象自己去查找或创建依赖。
  • 面向切面编程 (AOP):允许你将跨越应用程序多个模块的横切关注点(如日志、事务、安全)模块化。AOP 让你能专注于核心业务逻辑,而将通用功能(切面)分离出来。
  • Spring Boot:Spring 的一个子项目,旨在简化 Spring 应用的初始搭建和开发过程。它通过"约定大于配置"的原则,提供了自动配置、内嵌 Web 服务器(如 Tomcat)和"起步依赖"(Starter),让你能快速创建独立运行的、生产级的 Spring 应用。

3. 环境准备

开始之前,请确保你的开发环境已就绪:

  1. Java 开发工具包 (JDK):Spring Boot 3.x 需要 JDK 17 或更高版本。推荐使用 JDK 17 或 21。
  2. 构建工具:可以选择 Maven 或 Gradle。本文将以 Maven 为例。
  3. 集成开发环境 (IDE):推荐使用 IntelliJ IDEA(社区版或旗舰版)、Spring Tools Suite (STS) 或 VS Code。
  4. 网络连接:用于从 Maven 中央仓库下载依赖。

4. 创建第一个 Spring Boot 应用

我们将使用 Spring Initializr 来快速生成项目骨架,这是 Spring 官方提供的项目初始化工具。

步骤 1:访问 Spring Initializr

打开浏览器,访问 https://start.spring.io。

步骤 2:配置项目

在页面上进行如下配置:

  • Project: Maven
  • Language: Java
  • Spring Boot: 选择最新的稳定版本(如 3.x.x)
  • Group : com.example (你的组织域名,可自定义)
  • Artifact : demo (你的项目名,可自定义)
  • Name : demo
  • Description : Demo project for Spring Boot
  • Package name : com.example.demo
  • Packaging: Jar
  • Java: 17 或 21

步骤 3:添加依赖

在 Dependencies 区域,点击 "ADD DEPENDENCIES",搜索并添加:

  • Spring Web: 用于构建 Web 应用,包含 RESTful API 支持。

步骤 4:生成项目

点击页面底部的 GENERATE 按钮,下载生成的 demo.zip 文件。

步骤 5:导入项目

解压 demo.zip 文件,并用你的 IDE(如 IntelliJ IDEA)打开解压后的文件夹。

5. 项目结构与代码

导入项目后,你会看到类似如下的目录结构:

复制代码
demo/
├── src/
│   ├── main/
│   │   ├── java/com/example/demo/
│   │   │   ├── DemoApplication.java  // 主启动类
│   │   │   └── controller/           // (待创建) 控制器层
│   │   └── resources/
│   │       ├── static/               // 静态资源
│   │       ├── templates/            // 模板文件
│   │       └── application.properties // 配置文件
│   └── test/                         // 测试代码
└── pom.xml                           // Maven 配置文件

步骤 6:创建 REST 控制器

在 src/main/java/com/example/demo/ 目录下,新建一个 controller 包,并在其中创建 HelloController.java 文件:

java 复制代码
package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // 声明这是一个 REST 控制器
public class HelloController {

    @GetMapping("/hello") // 映射 HTTP GET 请求到 /hello 路径
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}

步骤 7:运行应用

找到 src/main/java/com/example/demo/DemoApplication.java 文件,这是 Spring Boot 应用的入口。直接运行其中的 main 方法。

java 复制代码
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);
    }
}

控制台会输出大量日志,当你看到类似 Tomcat started on port(s): 8080 (http) 的信息时,说明应用已成功启动。

步骤 8:测试应用

打开浏览器或使用 curl 命令,访问 http://localhost:8080/hello。你将看到页面上显示:Hello, Spring Boot!

恭喜!你的第一个 Spring Boot 应用已经成功运行。

6. 核心注解解析

让我们回顾一下代码中用到的几个关键注解:

  • @SpringBootApplication :这是一个组合注解,包含了 @SpringBootConfiguration、@EnableAutoConfiguration 和 @ComponentScan。它标记了主配置类,并开启了 Spring Boot 的自动配置和组件扫描。
  • @RestController :组合了 @Controller 和 @ResponseBody。它告诉 Spring 这个类是一个控制器,并且其所有方法的返回值都应直接写入 HTTP 响应体,而不是跳转到视图。
  • @GetMapping :是 @RequestMapping(method = RequestMethod.GET) 的简写。它将 HTTP GET 请求映射到特定的处理方法上。
相关推荐
小码哥_常4 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
学长毕设6 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw8 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号8 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
努力的小雨9 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
论文复现现场9 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠9 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David10 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
excel10 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放10 小时前
Python基础语法练习题(73)
java·前端·python