Spring和Springboot的区别

SpringBoot不是替代Spring的新框架,而是基于Spring框架的"快速开发脚手架"---简化了Spring的使用流程,底层依然是Spring的核心(IOC、AOP、ORM等)。

一、核心区别对比

二、关键差异详解

1、配置复杂度:Spring 繁琐,SpringBoot极简

这是最直观的差异,我们用"整合MyBatis"的例子对比:

Spring整合MyBatis(需手动写大量配置)

复制代码
// 1. 手动配置数据源
@Bean
public DataSource dataSource() {
    DruidDataSource ds = new DruidDataSource();
    ds.setUrl("jdbc:mysql://localhost:3306/test");
    ds.setUsername("root");
    ds.setPassword("123456");
    return ds;
}

// 2. 手动配置 SqlSessionFactory
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
    factory.setDataSource(dataSource);
    factory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
    return factory.getObject();
}

// 3. 手动配置 Mapper 扫描
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
    MapperScannerConfigurer scanner = new MapperScannerConfigurer();
    scanner.setBasePackage("com.example.mapper");
    return scanner;
}

// 4. 手动配置事务管理器
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

SpringBoot整合Mybatis(仅需依赖+少量配置)

第一步:引入启动器(自动引入所有相关依赖)

复制代码
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.16</version>
</dependency>

第二步:配置文件(application.yml)写数据库连接信息

复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.entity

第三步:启动类加 @MapperScan 即可,无需手动配置 Bean!!!

2、依赖管理:Spring 手动,SpringBoot自动

  • Spring:你需要手动引入每个依赖(如 spring-context、spring-jdbc、mybatis、druid 等),还要确保所有依赖的版本兼容(比如 Spring 5.3 要配 MyBatis 3.5+),一旦版本冲突,排查成本极高。
  • SpringBoot :提供 "启动器(Starter)" 机制,比如 spring-boot-starter-web 会自动引入 SpringMVC、Tomcat、jackson 等所有 Web 开发需要的依赖,且 SpringBoot 父工程已经内置了所有常用依赖的兼容版本,你无需关注版本号

3、启动方式:Spring复杂、SpringBoot一键启动

  • Spring
    • 非 Web 项目:需手动创建 IOC 容器(new AnnotationConfigApplicationContext());
    • Web 项目:需打包为 WAR 包,部署到外部 Tomcat 服务器,还要配置 web.xml
  • SpringBoot
    • 无论 Web / 非 Web 项目,只需写一个启动类,执行 main 方法即可:

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

4、自动配置:Spring无,SpringBoot核心特征

这是 SpringBoot 最核心的优势:

  • Spring :所有 Bean 都需要你手动配置(XML / 注解),比如要使用事务,需手动配置 DataSourceTransactionManager;要使用 SpringMVC,需手动配置 DispatcherServlet
  • SpringBoot :通过 "自动配置(AutoConfiguration)" 机制,根据你引入的依赖自动注册相关 Bean。比如:
    • 引入 spring-boot-starter-web,自动配置 DispatcherServlet、CharacterEncodingFilter 等 Web 相关 Bean;
    • 引入 spring-boot-starter-data-jpa,自动配置 EntityManagerFactory、JpaTransactionManager 等 JPA 相关 Bean。

三、二者的核心联系

  • 底层一致:SpringBoot 完全基于 Spring 核心(IOC、AOP、DI、ORM 等),没有脱离 Spring 的体系;
  • 兼容所有 Spring 用法 :Spring 中的 @Autowired@Service@Transactional 等注解,在 SpringBoot 中完全可用;
  • SpringBoot 是 "增强版":它没有新增核心功能,只是对 Spring 的配置、依赖、启动流程做了封装和简化。

四、使用场景选择

  • Spring:适合需要深度定制化配置的场景(如大型传统企业项目,需精细控制每一个 Bean);
  • SpringBoot:适合快速开发的微服务、中小型项目,或需要快速验证想法的场景(90% 以上的现代 Java 项目都会选 SpringBoot)。

五、总结

  • 核心关系:SpringBoot 是 Spring 的 "脚手架",不是替代品,底层核心完全依赖 Spring;
  • 核心差异:Spring 需手动配置所有细节,SpringBoot 靠 "启动器 + 自动配置" 实现零 / 少配置、一键启动;
  • 使用选择:优先选 SpringBoot 提升开发效率,如需深度定制再结合 Spring 的底层配置。

简单记:Spring是"毛坯房"(需自己装修),SpringBoot是"精装房"(开箱即用,也可微调)。

相关推荐
二哈赛车手9 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~10 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS82910 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
未若君雅裁11 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记12 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI12 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
辰海Coding14 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路14 小时前
C++ 多线程与并发
java·jvm·c++
AI视觉网奇14 小时前
linux 检索库 判断库是否支持
java·linux·服务器