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是"精装房"(开箱即用,也可微调)。

相关推荐
roman_日积跬步-终至千里11 分钟前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦33 分钟前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli733 分钟前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源
HalvmånEver35 分钟前
Linux:线程互斥
java·linux·运维
rainbow688943 分钟前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
灵感菇_1 小时前
Java 锁机制全面解析
java·开发语言
indexsunny1 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
娇娇乔木1 小时前
模块十一--接口/抽象方法/多态--尚硅谷Javase笔记总结
java·开发语言
saber_andlibert1 小时前
TCMalloc底层实现
java·前端·网络
wangjialelele1 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先