1. 定位与目标
Spring Framework
- 定位 :一个以解耦 和模块化为核心的企业级 Java 开发框架,提供 IOC(控制反转)、AOP(面向切面编程) 等基础功能。
- 解决的问题:通过依赖注入和模块化设计简化复杂的企业应用开发。
- 缺点:需手动配置 XML 或 Java 类,依赖管理和整合第三方库费时费力(例如集成 MySQL + Hibernate + Spring MVC)。
Spring 是一个"积木式"框架,按需选装不同模块:

开发痛点 :
每个模块需单独引入并配置(如整合 Hibernate 需手动配置 SessionFactory
、DataSource
)
Spring Boot
- 定位 :Spring 的上层扩展框架 ,目标是快速启动和简化配置。("约定优于配置")
- 解决的问题:通过自动配置(Auto-Configuration)和 Starter 依赖包,让开发者无需关心繁琐的 XML 和依赖冲突。
- 示例 :引入
spring-boot-starter-web
后,自动集成 Tomcat、Jackson 和 Spring MVC,开发者只需专注于业务代码。
Spring Boot 在 Spring 基础上新增两个核心层:

Starter 示例 :
使用 spring-boot-starter-data-jpa
会自动引入:
- Hibernate(ORM 实现)
- Spring Data JPA(DAO 抽象层)
- 数据库驱动(如 MySQL Connector)
自动配置示例 :
当检测到 DataSource
配置存在且 Hibernate 在 Classpath 中时,Spring Boot 自动创建:
EntityManagerFactory
JpaTransactionManager
2. 核心差异

3. 代码示例对比
1. Spring 开发流程
步骤 1:手动添加 Maven 依赖
xml
<dependencies>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
</dependencies>
问题:需自解决依赖版本冲突。
步骤 2:配置 XML (或 Java Config)
applicationContext.xml
→ 配置包扫描、DataSource
、SessionFactory
、事务管理器、视图解析器等。
xml
<!-- 手动配置 DataSource -->
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
步骤 3:代码编写 → 冗余的模板配置
xml
public class UserController {
@Autowired
private UserService userService; // 需手动启用包扫描
}
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private SessionFactory sessionFactory; // 需在配置中声明 Bean
}
2. Spring Boot 开发流程
步骤 1:使用 Spring Initializr 勾选依赖
- Spring Web
- Spring Data JPA
- MySQL Driver
步骤 2:application.yml → 极简配置
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
jpa:
hibernate:
ddl-auto: update
步骤 3:直接编写业务代码
java
@RestController
public class UserController {
@Autowired
private UserRepository userRepository; // 由 Spring Data JPA 自动创建实现类
}
// Spring Data JPA 直接提供基础 CRUD 方法
public interface UserRepository extends JpaRepository<User, Long> { }
4.工作原理深度解析
1. Spring Boot 自动配置机制
Spring Boot 通过 条件注解(Conditional) 动态判断是否启用某些配置。
代码示例 :Spring Boot 内嵌的 DataSourceAutoConfiguration
java
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) // 条件1:存在 DataSource 类
@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory") // 条件2:无其他数据源配置
@EnableConfigurationProperties(DataSourceProperties.class) // 绑定配置到 DataSourceProperties
public class DataSourceAutoConfiguration {
@Bean
@ConditionalOnMissingBean(DataSource.class) // 条件3:用户未自定义 DataSource
public DataSource dataSource(DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().build(); // 创建 DataSource
}
}
关键点:
- 仅在满足所有
@Conditional
条件时才会注册DataSource
Bean。 - 如果用户已手动配置
DataSource
(@Bean
),则跳过自动配置。
2. Spring Boot Starter 的工作流程
以 spring-boot-starter-web
为例,其内部逻辑:
- 引入
spring-webmvc
、spring-web
、tomcat-embed-core
等依赖。 - 触发
WebMvcAutoConfiguration
→ 自动配置DispatcherServlet
、ViewResolver
等。 - 自动启用默认错误处理(
BasicErrorController
)、静态资源映射(/static
目录)。
4.如何选择?
适用场景对比

技术选型决策树
txt
是否需要快速启动项目?
├── 是 → Spring Boot
└── 否 → 是否需要微服务/云原生部署?
├── 是 → Spring Boot + Spring Cloud
└── 否 → Spring(如系统需与遗留框架深度集成)
5.学习路径与调试技巧
1. 学习路线规划
- 第 1 阶段:掌握 Spring Core → 理解 IOC、AOP、Bean 生命周期。
- 第 2 阶段:学习 Spring MVC → 手动搭建 Web 应用,配置拦截器、视图解析等。
- 第 3 阶段:过渡到 Spring Boot → 熟悉自动配置原理、Starter 使用。
- 第 4 阶段:深入高级主题 → Spring Boot 源码、自定义 Starter、健康检查与监控。
2. Spring Boot 调试技巧
- 查看自动配置结果 :在
application.properties
中添加debug=true
,启动时打印已启用的自动配置类。 - 排除不需要的自动配置:
java
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication { ... }
分析 Bean 依赖关系 :使用 IDEA 的 Diagram 工具查看 Bean 的依赖图。
总结
- Spring 是基础:如汽车发动机,需要自行组装零件(手动配置)才能行驶。
- Spring Boot 是完整车型:提供自动挡、导航系统(自动配置),适合快速上路。
- 关联性:Spring Boot ≠ 取代 Spring,而是基于 Spring 构建的"开发者友好层"。