news 2026/1/27 8:00:56

我记不住的那些spring/springboot差异

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我记不住的那些spring/springboot差异

Spring Boot 是基于 Spring Framework 的快速开发脚手架,其核心目标是简化 Spring 应用的初始搭建和开发过程。它不是替代 Spring,而是通过“约定优于配置”“自动配置”“起步依赖”等设计,解决了传统 Spring 开发中配置繁琐、依赖冲突、部署复杂等痛点。

一、核心设计理念:“约定优于配置”(Convention Over Configuration)

传统 Spring
  • 显式配置为主:几乎所有功能都需要手动配置(XML 或 JavaConfig)。例如:

    • 配置 DispatcherServlet(Spring MVC 入口)、视图解析器、数据源、事务管理器;

    • 整合 MyBatis 时需手动定义SqlSessionFactoryMapperScannerConfigurer

    • 配置日志(Log4j/Logback)、AOP 切面、安全规则等。

  • 决策成本高:开发者需为每个组件指定细节(如端口、路径、连接池参数),导致配置文件冗长(如applicationContext.xml动辄数百行)。

Spring Boot
  • 默认约定优先:基于“合理默认值”减少手动配置,仅在偏离默认时显式调整。例如:

    • 默认端口8080、上下文路径/、日志框架 Logback、JSON 解析器 Jackson;

    • 引入spring-boot-starter-web自动配置 Spring MVC、内嵌 Tomcat、静态资源映射;

    • 引入spring-boot-starter-data-jpa自动配置数据源、EntityManager、事务管理器。

  • “零配置”启动:通过@SpringBootApplication注解(组合了@Configuration@EnableAutoConfiguration@ComponentScan)一键启用自动配置,无需 XML。

也就是说

传统 Spring 的痛点是“配置冗余”:80% 的配置是“常规操作”(如 Web 应用用 Tomcat、JSON 用 Jackson),只有 20% 是个性化需求。开发者花大量时间写“本应默认”的配置,而非业务逻辑。

Spring Boot 的改进是:把 80% 的常规配置固化为“约定”,让开发者只关注 20% 的个性化配置。

二、依赖管理:起步依赖(Starter Dependencies) vs 手动管理

传统 Spring
  • 依赖碎片化:需手动引入大量独立依赖(如 Spring Core、Spring MVC、Jackson、Tomcat Embed 等),并自行协调版本兼容性(易出现“依赖地狱”)。

    示例(传统 Spring MVC 项目 pom.xml):

    <dependencies> <!-- Spring 核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.20</version> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.20</version> </dependency> <!-- 内嵌 Tomcat --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.63</version> </dependency> <!-- JSON 解析 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.3</version> </dependency> <!-- ... 其他依赖(日志、验证、文件上传等) --> </dependencies>
  • 版本冲突风险:不同依赖可能依赖同一库的不同版本(如 Spring 和 Hibernate 依赖不同版本的 Jackson),需手动排除冲突。

Spring Boot
  • 起步依赖(Starters):将常用场景的依赖打包为“一站式” Starter,自动管理版本兼容。例如:

    • spring-boot-starter-web:包含 Spring MVC、内嵌 Tomcat、Jackson、Validation 等 Web 开发必备依赖;

    • spring-boot-starter-data-jpa:包含 Spring Data JPA、Hibernate、数据库连接池(HikariCP)等 ORM 依赖;

    • spring-boot-starter-test:包含 JUnit、Mockito、AssertJ 等测试依赖。

      示例(Boot Web 项目 pom.xml):

    <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 无需指定版本,由 spring-boot-starter-parent 统一管理 --> </dependency> </dependencies> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.3</version> <!-- Boot 统一管理所有依赖版本 --> <relativePath/> </parent>
  • 版本仲裁:通过spring-boot-dependencies父工程预定义数千个依赖的兼容版本,避免冲突。如需覆盖版本,可在pom.xml中显式声明。

三、部署方式:可执行 JAR(内嵌容器) vs 传统 WAR

传统 Spring
  • WAR 包部署:需打包为 WAR 文件,依赖外部 Servlet 容器(如 Tomcat、Jetty),部署流程为:

    1. 本地打包mvn clean package生成xxx.war

    2. 上传到服务器,放入 Tomcat 的webapps目录;

    3. 启动 Tomcat 容器加载应用。

  • 环境依赖:服务器需预装指定版本的 Servlet 容器,且应用与容器版本强耦合(如 Tomcat 9 不支持 Jakarta EE 9+)。

Spring Boot
  • 可执行 JAR/WAR:通过内嵌 Servlet 容器(Tomcat/Jetty/Undertow),打包为包含所有依赖的“胖 JAR”(Fat JAR),可直接通过java -jar运行:

    java -jar target/myapp-1.0.0.jar # 直接启动,无需外部容器
  • 部署简化

    • 无需预装容器,跨环境一致性高(开发/测试/生产环境使用相同 JAR);

    • 支持传统 WAR 部署(通过spring-boot-starter-tomcatprovided作用域,将容器交给外部管理);

    • 容器可配置(如修改端口:server.port=8081,或切换容器:spring-boot-starter-jetty)。

四、自动配置(AutoConfiguration):减少手动 Bean 定义

传统 Spring
  • 显式 Bean 定义:需通过 XML 或@Bean注解手动注册所有组件。例如,配置 Spring MVC 需定义:

    @Configuration public class MvcConfig implements WebMvcConfigurer { @Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } }
  • 整合第三方组件复杂:如整合 Redis 需手动配置RedisTemplateConnectionFactory,并处理序列化逻辑。

Spring Boot
  • 自动配置原理:基于类路径扫描​ 和条件注解@ConditionalOnClass@ConditionalOnMissingBean等),根据项目依赖自动注册 Bean。例如:

    • 当类路径存在DispatcherServlet.class(即引入spring-boot-starter-web),自动配置DispatcherServletHandlerMapping等 MVC 组件;

    • 当存在DataSource.classHibernate.class(即引入spring-boot-starter-data-jpa),自动配置EntityManagerFactoryTransactionManager

    • 当存在RedisTemplate.class(即引入spring-boot-starter-data-redis),自动配置连接池和序列化器。

  • 自定义配置覆盖:通过application.properties@Configuration类覆盖默认配置。例如:

    # 修改内嵌 Tomcat 端口 server.port=8081 # 配置数据源 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456

自动配置的本质:Spring Boot把传统Spring中那些重复的、模板化的Bean配置都写好了,根据你添加的依赖自动创建这些Bean,你只需要通过properties文件调整参数就行

工作流程:

  1. Spring Boot启动时扫描所有jar包的META-INF/spring.factories
  2. 找到所有自动配置类(比如DataSourceAutoConfiguration)
  3. 检查@Conditional条件是否满足:
    • classpath里有没有DataSource.class? ✓ (因为你添加了JDBC依赖)
    • 你自己配置了DataSource了吗? ✗ (没配置)
  4. 条件都满足,创建DataSourceBean
  5. application.properties读取配置注入到Bean里
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/24 20:08:05

实战案例:用WC.JS1.8.8网页版开发电商商品展示页

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商商品展示页面&#xff0c;包含商品图片轮播、价格显示、加入购物车按钮和商品详情折叠面板。使用WC.JS1.8.8实现数据动态加载&#xff0c;当用户点击加入购物车时更新…

作者头像 李华
网站建设 2026/1/24 19:43:28

APPIUM自动化测试开发效率提升秘籍

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个APPIUM自动化测试应用&#xff0c;重点展示快速开发流程和效率优势。点击项目生成按钮&#xff0c;等待项目生成完整后预览效果 在移动应用开发领域&#xff0c;自动化测试…

作者头像 李华
网站建设 2026/1/27 2:21:55

海运物流追踪:GLM-4.6V-Flash-WEB自动录入箱号信息

海运物流追踪&#xff1a;GLM-4.6V-Flash-WEB自动录入箱号信息 在港口堆场的烈日下&#xff0c;一名操作员正举着PDA对准集装箱侧面&#xff0c;眯着眼辨认锈迹斑驳上的箱号字符。这串由四个字母和七个数字组成的编码&#xff08;如COSU1234567&#xff09;&#xff0c;是整条海…

作者头像 李华
网站建设 2026/1/27 4:07:00

Jina Code Embeddings:0.5B 和 1.5B 的 SOTA 代码检索

作者&#xff1a;来自 Elastic JINA 今天我们发布了 jina-code-embeddings&#xff0c;这是一个新的代码 embedding 模型套件&#xff0c;提供两种规模 —— 0.5B 和 1.5B parameters&#xff0c;并支持 1-4 bit GGUF 量化版本。基于最新的代码生成 LLM 构建&#xff0c;这些模…

作者头像 李华
网站建设 2026/1/27 4:01:52

AI如何助力音乐源解析与处理?LXMUSIC音源技术解析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于AI的音乐源解析工具&#xff0c;能够自动识别LXMUSIC音源中的音频特征&#xff0c;并优化音质。功能包括&#xff1a;音频降噪、音轨分离、智能均衡器调整。使用Kimi-…

作者头像 李华
网站建设 2026/1/26 23:25:01

如何用AI自动修复0xC0000142应用程序错误

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Windows应用程序错误诊断工具&#xff0c;专门处理0xC0000142错误。功能包括&#xff1a;1)自动扫描系统日志和事件查看器提取错误详情&#xff1b;2)分析相关应用程序的D…

作者头像 李华