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。
- 非 Web 项目:需手动创建 IOC 容器(
- 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是"精装房"(开箱即用,也可微调)。