Skip to content

开发你的第一个 Spring Boot 应用程序

本节将介绍如何开发一个简单的“Hello World!” Web 应用程序,以此展示 Spring Boot 的一些核心特性。你可以根据偏好选择 MavenGradle 作为构建系统。

提示

你可以访问 start.spring.io 并选择 "Web" Starter 来快速生成项目结构,从而直接跳过繁琐的配置阶段,直接开始编码

1. 环境准备

在开始之前,请确保你已安装了符合要求的 Java 版本(17 或更高):

shell
$ java -version
# 输出应显示 openjdk 17+

2. 项目搭建

我们需要创建一个最基础的项目配置文件。

xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>myproject</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>4.0.1</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>
gradle
plugins {
	id 'java'
	id 'org.springframework.boot' version '4.0.1'
	id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
}

3. 编写代码

创建目录结构 src/main/java/com/example/,并新建文件 MyApplication.java

java
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class MyApplication {

	@RequestMapping("/")
	String home() {
		return "Hello World!";
	}

	public static void main(String[] args) {
		SpringApplication.run(MyApplication.class, args);
	}

}
kotlin
package com.example

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@SpringBootApplication
class MyApplication {

	@RequestMapping("/")
	fun home() = "Hello World!"

}

fun main(args: Array<String>) {
	runApplication<MyApplication>(*args)
}

注解解析

  • @RestController: 告诉 Spring 这个类是一个 Web 控制器,方法的返回值将直接作为 HTTP 响应体发送给客户端。
  • @SpringBootApplication: 一个复合注解,包含了自动配置(@EnableAutoConfiguration)、组件扫描(@ComponentScan)和配置类定义。它是 Spring Boot 应用的核心入口标识。
  • @RequestMapping("/"): 将路径为 / 的 HTTP 请求映射到 home 方法上。

4. 运行与验证

在项目根目录下,执行以下命令启动应用:

shell
$ mvn spring-boot:run
shell
$ ./gradlew bootRun

启动完成后,打开浏览器访问 http://localhost:8080,你应该能看到页面显示: Hello World!

5. 打包成可执行 JAR

Spring Boot 可以将应用及其所有依赖打包成一个单一的“胖 JAR(Fat Jar)”。

shell
$ mvn package
# 生成文件:target/myproject-0.0.1-SNAPSHOT.jar
shell
$ ./gradlew bootJar
# 生成文件:build/libs/myproject-0.0.1-SNAPSHOT.jar

要运行这个 JAR 文件,只需使用标准的 Java 命令: java -jar <文件名>.jar


补充教学

1. 为什么 8080 端口被占用了?

默认情况下,Spring Boot 嵌入的 Tomcat 监听 8080 端口。如果该端口被其他应用占用,你可以在 src/main/resources/application.properties 中添加 server.port=8081 来更改端口。

2. 理解 @SpringBootApplication 的魔力

当你启动应用时,Spring Boot 会扫描当前类所在的包及其子包。如果你的项目结构层次太深或类放在了错误的包下,可能会导致控制器无法被发现。这也是为什么我们建议将启动类放在项目的根包(Root Package)下。

3. Maven POM 中的 Parent 是必须的吗?

不是必须的,但强烈推荐。spring-boot-starter-parent 预设了大量的库版本、资源过滤配置以及插件默认设置。如果你无法继承它(比如公司有自己的 Parent),你可以通过 dependencyManagement 引入 spring-boot-dependencies 来获取同样的版本管理能力。

4. 什么是热部署 (DevTools)?

在开发过程中,频繁手动重启是很低效的。你可以添加 spring-boot-devtools 依赖,它会监控文件变化并自动触发轻量级的应用重启,让你的修改即时生效。

Based on Spring Framework.