SpringBoot系列之从繁琐配置到一键启动之旅

Spring Boot 极简入门:从繁琐配置到一键启动的魔法之旅

"Spring Boot 不是另一种框架,而是让你忘记框架的存在。"

------ 本文将带你回顾 Spring 到 Spring Boot 的演进逻辑,并用 10 分钟完成 MyBatis 集成实战。


1 为什么需要 Spring Boot?

阶段 痛点 Spring Boot 解法
Spring 早期 大量 XML 配置、依赖坐标地狱 Starter 一键依赖
Spring 4.x @Configuration + @Import 仍显啰嗦 自动装配
微服务时代 多环境配置、外部化配置混乱 application.yml 统一管理

Spring Boot 在 Spring 5.2.8 基础上,做两件事:

  1. Bean 自动注入:引入 Starter → 核心 Bean 直接就绪。
  2. 配置中心化application.yml 取代分散的 XML / properties。

2 自动装配原理(面试高频)

  1. @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
  2. spring-boot-autoconfigure 里预置 120+ 自动配置类,按需生效。
  3. @ConditionalOnClass@ConditionalOnMissingBean 精准控制 Bean 注册。

一句话约定优于配置 ------ 有就生效,没有就跳过。


3 启动流程速览

复制代码
Main 方法
   ↓
SpringApplication.run()
   ↓
推断应用类型(Servlet / Reactive)
   ↓
创建 Environment → 读取 application.yml
   ↓
调用 AutoConfigurationImportSelector → 加载 META-INF/spring.factories
   ↓
实例化 IOC 容器 → 启动内嵌 Tomcat

4 实战:Spring Boot 集成 MyBatis(3 步完成)

4.1 引入依赖(仅需 1 个 Starter

xml 复制代码
<!-- MyBatis + Spring Boot 官方 Starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.1</version>
</dependency>

<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

4.2 统一配置 application.yml

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml   # XML 映射
  type-aliases-package: com.example.entity         # 实体别名

4.3 开启 Mapper 扫描 & 使用

java 复制代码
@SpringBootApplication
@MapperScan("com.example.mapper")   // 3. 扫描 Mapper 接口
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
java 复制代码
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Long id);
}

启动后:无需任何 XML 或 JavaConfig,直接访问数据库。


5 配置文件优先级(外部化配置)

Spring Boot 按以下顺序覆盖(高 → 低):

  1. 命令行参数
  2. application-{profile}.yml
  3. application.yml
  4. 默认属性(@ConfigurationProperties

示例:

bash 复制代码
java -jar app.jar --server.port=9090 --spring.profiles.active=prod

6 面试金句速记

问题 一句话答案
Starter 是什么? 预定义依赖 + 自动配置,开箱即用。
自动装配触发条件? @ConditionalOnClass 判断类路径存在即生效。
如何关闭自动配置? @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
多环境配置? application-dev.ymlapplication-prod.yml + --spring.profiles.active

7 总结

Spring Boot 用 "约定优于配置" 的理念,把我们从 XML 地狱 拯救出来:

  • Starter 负责"一键依赖";
  • AutoConfiguration 负责"智能装配";
  • application.yml 负责"一处配置,到处生效"。

掌握这三板斧,你的 Spring Boot 面试和项目开发都能 事半功倍

相关推荐
摇滚侠12 分钟前
Spring Boot 3零基础教程,WEB 开发 国际化 Spring Boot + Thymeleaf 笔记45
spring boot·笔记·后端
间彧14 分钟前
Java AQS详解与项目实战
后端
golang学习记21 分钟前
性能飙升4倍,苹果刚发布的M5给人看呆了
人工智能·后端
搬砖的工人43 分钟前
记录WinFrom 使用 Autoupdater.NET.Official 进行软件升级更新
java·前端·.net
努力进修1 小时前
【JavaEE初阶】 多线程编程核心:解锁线程创建、方法与状态的创新实践密码
android·java·java-ee
程序员爱钓鱼1 小时前
Python编程实战 · 基础入门篇 | 类型转换与输入输出
后端·python
程序员爱钓鱼1 小时前
Python编程实战 · 基础入门篇 | 运算符详解
后端·python·编程语言
xiezhr1 小时前
见过哪些醍醐灌顶的Java代码:从"卧槽"到"原来如此"的顿悟
java·后端·设计模式
当战神遇到编程1 小时前
数组的定义与使用
java·idea
canonical_entropy1 小时前
Nop平台架构白皮书:一个基于广义可逆计算理论的软件构造体系评估
后端·低代码·领域驱动设计