【Java后端】Spring Boot 比 Spring 的优势:以 RESTful 接口开发为例 一文详解
Spring Boot 比 Spring 的优势:以 RESTful 接口开发为例
一、引言
很多开发者刚接触 Spring Boot 时,第一感觉就是:用起来比传统 Spring 项目轻松太多。
但是,具体到底省在哪里?为什么要选 Spring Boot?
本文通过一个最常见的场景——实现一个返回 JSON 的 RESTful 接口,来具体展示 Spring vs Spring Boot 的区别。
二、场景需求
实现一个简单接口:
GET /hello
返回: {"message": "Hello, World!"}
三、使用传统 Spring(Spring Framework)
1. Maven 配置
在 pom.xml
中,需要显式指定每个依赖和版本:
<dependencies><!-- Spring 核心 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.30</version></dependency><!-- Spring MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.30</version></dependency><!-- JSON 序列化:Jackson --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.0</version></dependency><!-- Servlet API(由容器提供也可手动引入) --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency>
</dependencies>
⚠️ 开发者必须自己确保这些依赖版本兼容,否则可能会遇到冲突。
2. Web.xml 配置 DispatcherServlet
在 WEB-INF/web.xml
中:
<web-app><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
3. Spring MVC 配置(spring-mvc.xml)
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"><!-- 开启注解驱动 --><mvc:annotation-driven/><!-- 扫描 Controller 包 --><context:component-scan base-package="com.example.controller"/>
</beans>
4. Controller 类
@Controller
public class HelloController {@GetMapping("/hello")@ResponseBodypublic Map<String, String> hello() {Map<String, String> res = new HashMap<>();res.put("message", "Hello, World!");return res;}
}
5. 部署与运行
打包成
war
文件部署到外部 Tomcat
启动 Tomcat,访问
http://localhost:8080/hello
四、使用 Spring Boot
1. Maven 配置
只需要一个 Starter:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version>
</parent><dependencies><!-- Web Starter 包含了 Spring MVC + Jackson + Tomcat --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
✅ 不需要手动写版本号,Spring Boot 的 BOM(依赖管理) 自动帮你选定兼容版本。
2. 启动类
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
3. Controller 类
@RestController
public class HelloController {@GetMapping("/hello")public Map<String, String> hello() {return Map.of("message", "Hello, World!");}
}
4. 运行方式
直接执行:
mvn spring-boot:run
# 或者
java -jar target/demo-0.0.1-SNAPSHOT.jar
无需 Tomcat 部署,因为 Spring Boot 已经内置 Tomcat。
五、Spring vs Spring Boot 的对比总结
对比维度 | Spring(传统方式) | Spring Boot |
---|---|---|
依赖管理 | 手动指定每个依赖和版本,容易冲突 | Starter 自动引入常用依赖,BOM 管理版本 |
配置文件 | 需要 web.xml + XML/JavaConfig | 几乎零配置,只需 @SpringBootApplication |
容器部署 | 打包 war,部署到外部 Tomcat/Jetty | 内嵌 Tomcat,直接 java -jar 运行 |
REST 返回 JSON | 需要引入 Jackson,并配置 mvc:annotation-driven | 默认支持 JSON,自动注册 MessageConverter |
环境配置 | 配置分散在 XML / properties | 统一在 application.yml ,支持多 profile |
生产级功能 | 需手工集成 Actuator/监控 | 内置 Actuator,开箱即用 |
开发效率 | 配置繁琐,上手慢 | 上手快,专注业务 |
六、结论
通过同一个 RESTful 接口的对比可以看到:
在 Spring 中,你需要:
手动管理依赖版本
写
web.xml
、Spring XML 配置部署到外部容器
自己集成 JSON 解析
在 Spring Boot 中,你只需要:
一个 Starter 依赖
一个
@SpringBootApplication
一个
@RestController
直接运行 jar
总结一句话:
Spring Boot 的优势在于 更少的配置,更快的开发,更便捷的部署,让你把精力集中在业务逻辑,而不是环境搭建。