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 面试和项目开发都能 事半功倍

相关推荐
慧一居士19 分钟前
ThreadLocal 功能及使用场景介绍,使用详解
java
zh731438 分钟前
typephp的编译核心phpx原理解析
android·java·开发语言
2401_894915533 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
suaizai_4 小时前
Fastjson高危漏洞紧急修复指南
spring boot
Java牛马7 小时前
SpringBoot Starter 依赖相关总结
java·spring·springboot·starter·自动装配·依赖
吴声子夜歌7 小时前
Java面试——Spring Cloud原理及应用(二)
java·spring cloud·面试
SomeB1oody7 小时前
【RustyML入门】6.3. 并行归约
开发语言·后端·机器学习·rust·教程
东小西8 小时前
【SAA实战】第 1 篇:ReactAgent 入门——先撸个"会调工具的助手"跑起来
java·人工智能·spring
Profile排查笔记8 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
用户938515635078 小时前
用 AI 结对编程从 0 搭一个"单词后台管理系统":Next.js + Supabase + Drizzle + shadcn/ui 全记录
后端·postgresql·next.js