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

相关推荐
九皇叔叔2 小时前
【02】SpringBoot3 MybatisPlus 加入日志功能
java·mysql·mybatis·日志·mybatisplus
java1234_小锋2 小时前
什么是Java可重入锁?
java·开发语言
懈尘2 小时前
基于Spring Boot与LangChain4j的AI驱动新闻系统设计与工程实现
java·大数据·人工智能·spring boot·后端·langchain
不会c+2 小时前
Spring详解(二)IOC控制反转
java·开发语言
小锋学长生活大爆炸2 小时前
【工具】免费的文本读写API
java·数据库·mysql
csgo打的菜又爱玩2 小时前
数仓整体架构和建模架构
java·大数据·开发语言·架构
齐 飞2 小时前
MybatisPlus真正的批量新增
spring boot·mybatis
翱翔的苍鹰2 小时前
多Agent智能体系统设计思路
java·python·深度学习·神经网络·机器学习·tensorflow
小花2 小时前
java后端框架之spring
java·开发语言·spring