Spring Boot 入门:5分钟搭建Hello World

你提供的内容是 Spring Boot 官方文档中的一节(3.4节) ,标题为 "Developing Your First Spring Boot Application",即"开发你的第一个 Spring Boot 应用程序"。这一节通过一个简单的 "Hello World" Web 应用,带你一步步创建一个基于 Spring Boot 的项目,涵盖了从项目初始化、依赖管理、代码编写到打包运行的全过程。

下面我将逐段解析这段内容,帮助你理解其核心思想和技术要点,适合初学者或想系统了解 Spring Boot 工作原理的人。


🌱 一、总体目标:创建一个简单的 Web 应用

我们要做的就是一个最简单的 Web 程序:

  • 当访问 http://localhost:8080/ 时,返回 "Hello World!"
  • 使用 Maven 构建项目
  • 不依赖 IDE,手动编写 pom.xml 和 Java 代码
  • 最终打包成一个可执行的 JAR 文件("fat jar")

💡 这是一个典型的"入门示例",但它背后展示了 Spring Boot 的几个关键特性:自动配置、起步依赖、内嵌服务器、可执行 JAR。


🔧 二、准备工作

文档建议先检查 Java 和 Maven 是否安装正确:

bash 复制代码
java -version
mvn -v

要求:

  • Java 8 或以上
  • Maven 3.3+(文中使用的是 3.5.4)

然后创建一个空目录作为项目根目录。


📦 三、创建 Maven 的 pom.xml 文件(3.4.1)

pom.xml 是 Maven 项目的配置文件,相当于项目的"配方"。

关键配置如下:

xml 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
</parent>

spring-boot-starter-parent 的作用:

  1. 提供默认配置:比如编译版本(Java 8)、资源过滤、插件配置等。
  2. 依赖管理(Dependency Management) :它已经预定义了常用库的版本号,这样你在引入其他 Spring Boot 组件时,可以省略版本号,避免版本冲突。

比如你加 spring-boot-starter-web,不需要写 <version>...</version>,父 POM 已经帮你管理了。


🚀 四、添加类路径依赖(3.4.2)

Spring Boot 提供了"Starter Dependencies"(起步依赖),简化依赖引入。

我们要开发 Web 应用,所以添加:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

spring-boot-starter-web 包含了什么?

  • Spring MVC(用于构建 Web 接口)
  • 内嵌的 Tomcat 服务器(无需单独安装)
  • JSON 支持(Jackson)
  • 自动配置支持

你可以运行:

bash 复制代码
mvn dependency:tree

查看所有自动引入的依赖树,会发现多了上百个 JAR 包(包括 Spring 框架、Tomcat、日志等)。

💡 这就是"起步依赖"的威力:一句话引入一整套技术栈。


💻 五、编写 Java 代码(3.4.3)

创建文件:src/main/java/Example.java

java 复制代码
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

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

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

🔍 代码解析

1. @RestController
  • 是 Spring MVC 的注解。
  • 表示这个类是一个控制器,所有方法返回的内容直接作为 HTTP 响应体(不会跳转页面)。
  • 相当于 @Controller + @ResponseBody
2. @RequestMapping("/")
  • 将 HTTP 请求路径 / 映射到 home() 方法。
  • 所有 GET 请求访问根路径都会调用这个方法。
3. @EnableAutoConfiguration
  • 核心注解!告诉 Spring Boot 根据你添加的 jar 包自动配置项目
  • 因为你引入了 spring-boot-starter-web,它包含了 Spring MVC 和 Tomcat,所以 Spring Boot 自动:
    • 配置了一个嵌入式的 Tomcat 服务器
    • 启用了 Spring MVC
    • 设置了默认的 DispatcherServlet
    • 监听 8080 端口

✅ 这就是"约定优于配置"的体现:你不用写任何 XML 或配置类,Spring Boot 自动帮你搞定。

4. main 方法
  • 标准的 Java 入口。
  • SpringApplication.run(Example.class, args) 是 Spring Boot 的启动入口。
  • 它会:
    • 创建 Spring 容器(ApplicationContext)
    • 扫描组件
    • 启动内嵌 Web 服务器
    • 部署应用

▶️ 六、运行应用(3.4.4)

使用 Maven 插件运行:

bash 复制代码
mvn spring-boot:run

输出日志中会出现 Spring Boot 的 ASCII 艺术字和启动时间:

复制代码
:: Spring Boot :: (v2.3.12.RELEASE)
Started Example in 2.222 seconds

打开浏览器访问:

复制代码
http://localhost:8080

看到:

复制代码
Hello World!

✅ 成功!


📦 七、打包成可执行 JAR(3.4.5)

Spring Boot 的一大优势是:可以打包成一个独立的 JAR 文件,包含所有依赖和内嵌服务器 ,直接用 java -jar 运行。

步骤:

  1. pom.xml 中添加插件:
xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

spring-boot-starter-parent 已经默认配置了 repackage 目标,所以你只需要声明插件即可。

  1. 打包:
bash 复制代码
mvn package

生成两个文件:

  • target/myproject-0.0.1-SNAPSHOT.jar:可执行的"fat jar"
  • myproject-0.0.1-SNAPSHOT.jar.original:Maven 原始打包的 JAR(不含依赖)
  1. 运行:
bash 复制代码
java -jar target/myproject-0.0.1-SNAPSHOT.jar

同样能看到启动日志和 Web 服务。


🧠 八、关键概念总结

概念 说明
Starter Dependencies 简化依赖引入,如 spring-boot-starter-web 一键引入 Web 开发所需全部依赖
Auto-configuration 根据 classpath 中的 jar 包自动配置 Spring 应用(如发现 Tomcat 和 Spring MVC,就自动配置 Web 环境)
Embedded Server 内嵌 Tomcat/Jetty/Undertow,无需部署到外部服务器
Executable JAR 打包成包含所有依赖的单一 JAR,便于部署和运行
SpringApplication.run() 启动 Spring Boot 应用的核心方法
@SpringBootApplication (虽然本例没用,但实际常用)它 = @Configuration + @EnableAutoConfiguration + @ComponentScan

⚠️ 注意:这个例子使用了 @EnableAutoConfiguration,但在实际开发中,我们通常使用 @SpringBootApplication 注解,它包含了这个功能。


📚 九、下一步该学什么?(3.5 What to Read Next)

文档建议:

  1. spring.io 查看更多"Getting Started"教程,比如:
    • 如何连接数据库?
    • 如何做安全认证?
    • 如何做 REST API?
  2. 阅读 "Using Spring Boot" 章节,深入了解配置、外部化属性、 Profiles、日志等。
  3. 查看 "Spring Boot Features" 文档,学习更多高级特性。

✅ 总结:这个例子教会了我们什么?

技术点 学到了什么
项目构建 使用 Maven 创建 Spring Boot 项目
依赖管理 使用 Starter 简化依赖引入
自动配置 Spring Boot 能根据依赖自动配置环境
快速开发 几行代码就能启动一个 Web 服务
简化部署 打包成可执行 JAR,直接 java -jar 运行

💡 小贴士:现代开发更推荐使用 Spring Initializr

文档也提到:

你可以直接访问 start.spring.io 自动生成项目骨架。

推荐做法:

  1. 打开 https://start.spring.io
  2. 选择 Maven、Java、Spring Boot 版本
  3. 填写 Group、Artifact
  4. 添加依赖:Web
  5. 点击 "Generate" 下载项目 ZIP
  6. 解压后直接导入 IDE 或运行

这样可以省去手动写 pom.xml 的麻烦。


🧩 补充:现代写法(推荐)

上面的例子用了较老的写法。现在更标准的主类写法是:

java 复制代码
// 文件名: MyprojectApplication.java
package com.example.myproject;

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

@SpringBootApplication
@RestController
public class MyprojectApplication {

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

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

✅ 使用 @SpringBootApplication 更标准,也支持组件扫描。


✅ 结语

这个 "Hello World" 示例虽然简单,但它浓缩了 Spring Boot 的四大核心优势

  1. 自动配置(Auto-configuration)
  2. 起步依赖(Starters)
  3. 内嵌服务器(Embedded Server)
  4. 可执行 JAR(Executable JAR)

掌握这个例子,你就迈出了 Spring Boot 开发的第一步!

如果你想继续深入,我可以为你:

  • 生成一个完整的 Spring Boot 项目模板
  • 解释 application.properties 配置
  • 演示如何连接数据库
  • 教你如何做 REST API

欢迎继续提问!

相关推荐
失散134 小时前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
serve the people4 小时前
LangChain 表达式语言核心组合:Prompt + LLM + OutputParser
java·langchain·prompt
想ai抽4 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
武子康4 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼4 小时前
JavaWeb_p165部门管理
java·开发语言·前端
longgyy4 小时前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎
一成码农5 小时前
JavaSE面向对象(下)
java·开发语言
Javashop_jjj5 小时前
三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
spring boot·ui·uni-app
Madison-No75 小时前
【C++】探秘vector的底层实现
java·c++·算法