news 2026/4/24 12:41:06

我记不住的那些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/4/21 9:48:54

传统翻译vsAI翻译:‘麦子交换1‘案例的效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个效率对比工具&#xff0c;展示人工翻译和AI翻译Wheat Exchange 1的差异。实现&#xff1a;1)人工翻译流程模拟(输入-等待-输出)&#xff0c;2)AI即时翻译展示&#xff0c;…

作者头像 李华
网站建设 2026/4/21 0:08:55

效率对比:传统Flask开发 vs AI辅助开发全流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个博客平台项目&#xff0c;分别用传统方式和AI辅助方式实现。功能包括&#xff1a;1.用户系统 2.文章发布(支持Markdown) 3.评论功能 4.标签分类 5.全文搜索。记录两种方式…

作者头像 李华
网站建设 2026/4/17 19:18:09

GLM-4.6V-Flash-WEB支持的多模态任务类型汇总介绍

GLM-4.6V-Flash-WEB 支持的多模态任务类型深度解析 在当前AI技术向“看得懂、问得清、答得准”演进的过程中&#xff0c;多模态大模型正从实验室走向真实业务场景。尤其是在内容平台、电商平台、智能客服等需要高频图文交互的系统中&#xff0c;开发者面临一个现实难题&#xf…

作者头像 李华
网站建设 2026/4/19 15:53:00

生态保护项目引入GLM-4.6V-Flash-WEB评估恢复成效

生态保护项目引入GLM-4.6V-Flash-WEB评估恢复成效 在一片刚刚完成退耕还林的山地&#xff0c;护林员举起手机拍下一张航拍图&#xff0c;上传到网页平台&#xff0c;输入问题&#xff1a;“当前植被覆盖情况如何&#xff1f;是否有裸露土壤或破坏痕迹&#xff1f;”不到30秒&am…

作者头像 李华
网站建设 2026/4/18 7:26:41

B站视频转文字实战指南:三步搞定高效内容提取

B站视频转文字实战指南&#xff1a;三步搞定高效内容提取 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为整理B站视频内容而反复暂停播放吗&#xff1f…

作者头像 李华
网站建设 2026/4/17 18:35:45

用AI打造智能斗鱼养殖监测系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个斗鱼智能养殖监测系统&#xff0c;使用传感器监测水温、PH值和溶氧量&#xff0c;通过AI分析数据并自动调节。系统需包含实时数据展示面板、异常报警功能和历史数据记录。…

作者头像 李华