前言
SpringBoot作为Java领域最流行的微服务框架之一,凭借其“约定优于配置”的理念,极大简化了Spring应用的初始搭建和开发过程。本文将手把手带你创建一个SpringBoot项目,并实现第一个REST接口,同时解析其核心机制。
一、SpringBoot简介与优势
1.1 什么是SpringBoot?
SpringBoot是Pivotal团队基于Spring框架推出的快速开发脚手架,核心目标是:
-
零XML配置:通过注解和默认配置简化开发
-
内嵌Web服务器:无需部署WAR包,直接运行JAR
-
起步依赖:提供预置依赖组合(如
spring-boot-starter-web
) -
生产级特性:监控、健康检查、外部化配置等开箱即用
1.2 对比传统Spring MVC开发
特性 | Spring MVC | SpringBoot |
---|---|---|
项目创建 | 手动配置web.xml、pom依赖 | Spring Initializr一键生成 |
内嵌服务器 | 需部署到Tomcat/Jetty | 内置Tomcat/Jetty/Undertow |
配置复杂度 | 需显式配置组件 | 自动配置(按需加载) |
依赖管理 | 手动管理版本冲突 | starter统一管理依赖 |
二、使用Spring Initializr创建项目
2.1 通过官网创建
-
填写项目信息:
Project: Maven Language: Java Spring Boot: 3.x (建议选择最新稳定版) Group: com.example Artifact: demo Dependencies: Spring Web
2.2 使用IDEA创建(快捷方式)
-
打开IntelliJ IDEA → File → New → Project
-
选择Spring Initializr,填写项目信息
-
勾选Spring Web依赖
-
完成创建后,项目结构如下:
demo
├── src
│ ├── main
│ │ ├── java/com/example/demo
│ │ │ └── DemoApplication.java # 启动类
│ │ └── resources
│ │ ├── application.properties # 配置文件
│ │ └── static/ # 静态资源
├── pom.xml # Maven依赖管理
三、编写第一个Hello World接口
在com.example.demo
包下新建HelloController.java
:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, SpringBoot!";
}
}
-
@RestController
:组合了@Controller
和@ResponseBody
,直接返回JSON数据 -
@GetMapping
:等价于@RequestMapping(method = RequestMethod.GET)
3.2 启动应用
打开启动类DemoApplication.java
,运行main
方法:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
控制台输出以下日志表示启动成功:
Hello, SpringBoot!
3.3 测试接口
浏览器访问 http://localhost:8080/hello,页面显示:
Hello, SpringBoot!
四、内嵌Tomcat原理分析
4.1 内嵌服务器如何生效?
关键依赖spring-boot-starter-web
包含:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
SpringBoot通过条件装配自动配置Tomcat:
-
当检测到类路径存在
Servlet
和Tomcat
类时 -
创建
TomcatServletWebServerFactory
实例
4.2 启动流程核心代码
在SpringApplication.run()
方法中:
-
创建
ApplicationContext
-
调用
createWebServer()
初始化Web服务器 -
加载
Servlet
和Filter
(如DispatcherServlet) -
启动Tomcat并绑定端口
4.3 与传统Tomcat部署对比
传统方式 | SpringBoot内嵌 | |
---|---|---|
部署形式 | WAR包部署到Tomcat/webapps目录 | 直接执行JAR(含内嵌Tomcat) |
服务器配置 | 修改server.xml | application.properties配置 |
多环境适配 | 需手动配置不同环境 | Profile一键切换 |
五、注意事项与常见问题
-
端口冲突
若8080端口被占用,在application.properties
中添加:server.port=8081
2.依赖缺失
确保pom.xml中包含:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.启动类位置
启动类需放在根包下,否则组件扫描可能失效。