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

相关推荐
霸道流氓气质4 分钟前
AI应用成本优化完全指南:Token压缩、语义缓存与模型路由的Java生产级实战
java·人工智能·缓存
mmm.c12 分钟前
Redis 两级缓存 + Pub/Sub 广播:一次为抗高并发做的缓存改造
java
yexianglunbai12 分钟前
中间件(Middleware)详解:概念、作用与实战
java·开发语言·中间件
叶总没有会14 分钟前
OpenFeign
java·开发语言·springcloud·openfeign
小七在进步15 分钟前
类和对象(四)
java·javascript·ajax
白帽攻防录18 分钟前
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信
java·网络安全·tomcat·apache
后端LV22 分钟前
三级缓存的两个失效盲区,我用 binlog 和消费组广播补上了
java·架构
写了20年代码的老程序员23 分钟前
想让 AI 改 Bug 快准狠?先给日志加个业务代码坐标
java·后端·apache log4j
SL_staff25 分钟前
JVS-Rules vs Drools:金融风控团队为何转向业务可编辑的决策平台
java·spring cloud·github
Zhou14113627 分钟前
SpringMVC_03_进阶功能
java