当前位置: 首页 > article >正文

深入解析 Spring Boot 中 MyBatis 自动配置的流程

在 Spring Boot 项目中,自动配置是一个非常强大的功能,可以极大简化配置工作。本文将通过 MyBatis 的自动配置为例,详细解析 Spring Boot 自动配置的整个流程,包括从 META-INF/spring.factories 文件到 mysql-connector-java 依赖的引入,帮助大家更好地理解 Spring Boot 的自动配置机制。

1. @SpringBootApplication 注解概述

@SpringBootApplication 是一个组合注解,包含了以下三个关键注解:

  • @SpringBootConfiguration:标记当前类为配置类,相当于 @Configuration
  • @EnableAutoConfiguration:启用自动配置机制。
  • @ComponentScan:自动扫描并加载指定包及其子包中的组件。

这些注解共同作用,启动并配置 Spring Boot 应用。

2. @EnableAutoConfigurationMETA-INF/spring.factories

@EnableAutoConfiguration 是 Spring Boot 自动配置的核心注解。它通过 @Import(AutoConfigurationImportSelector.class) 将自动配置类导入到 Spring 容器中。这个过程涉及到 META-INF/spring.factories 文件。

在 Spring Boot 的 spring-boot-autoconfigure 包中,META-INF/spring.factories 文件中列出了所有可以自动配置的类。例如,MyBatis 的自动配置类在 mybatis-spring-boot-autoconfigure 包中声明如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
3. MyBatis 自动配置类的工作原理

MyBatis 的自动配置类 MybatisAutoConfiguration 会根据项目中的依赖和配置,自动将 MyBatis 的核心组件(如 SqlSessionFactorySqlSessionTemplate 等)注入到 Spring 容器中:

@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class})
public class MybatisAutoConfiguration {

    private final MybatisProperties properties;
    private final DataSource dataSource;

    @Bean
    @ConditionalOnMissingBean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
        factory.setDataSource(this.dataSource);
        return factory.getObject();
    }

    @Bean
    @ConditionalOnMissingBean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
4. 引入 MySQL 连接驱动

在使用 MyBatis 时,我们通常需要连接到数据库。以 MySQL 为例,通常需要在 pom.xml 中引入 mysql-connector-java 依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.30</version>
</dependency>

mysql-connector-java 提供了与 MySQL 数据库通信的能力,Spring Boot 在启动时会检测到该驱动并配置数据源。

5. 数据源自动配置

Spring Boot 自带的 DataSourceAutoConfiguration 会根据项目中引入的数据库驱动,自动配置 DataSource 并注入到 Spring 容器中。MyBatis 的自动配置类会依赖于此 DataSource

@Configuration
@EnableConfigurationProperties(DataSourceProperties.class)
@ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class})
@ConditionalOnMissingBean({DataSource.class})
@ConditionalOnProperty(name = "spring.datasource.type")
@Import({DataSourceConfiguration.Hikari.class})
public class DataSourceAutoConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.hikari")
    public DataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }
}
6. 整体流程总结
  1. Spring Boot 启动@SpringBootApplication 注解启动了整个 Spring Boot 应用,触发 @EnableAutoConfiguration 机制。
  2. 读取配置类AutoConfigurationImportSelectorMETA-INF/spring.factories 文件中读取 MyBatis 的自动配置类,并将其注入 Spring 容器。
  3. 自动配置 MyBatisMybatisAutoConfiguration 根据项目中的配置和依赖,自动配置 MyBatis 的核心组件。
  4. 配置数据源:通过引入 mysql-connector-java 依赖,Spring Boot 自动配置数据源并与 MyBatis 进行整合。

通过以上流程,Spring Boot 实现了 MyBatis 和 MySQL 数据源的自动配置,大大简化了开发者的配置工作。理解这个流程,不仅有助于更好地使用 MyBatis,也能帮助你深入理解 Spring Boot 的自动配置机制。

7. 自动配置类是什么?

大家从上往下看的时候时常看到自动配置类,那到底什么是自动配置类呢?其实可以拆成两部分来看,第一部分是配置类,第二部分是自动化机制。对于这个感兴趣的朋友可以移步到这里继续学习—>自动配置类


http://www.kler.cn/news/284257.html

相关文章:

  • Python 如何操作 Excel 文件(openpyxl, xlrd)
  • 计算机学习
  • java框架第二课(Reflection反射机制)
  • 最短路算法详解(Dijkstra 算法,Bellman-Ford 算法,Floyd-Warshall 算法)
  • 【手机取证】智能手机位置数据提取方法
  • 《黑神话:深度探索与攻略指南》——虎先锋隐藏门在哪里
  • Python生成指定数量的随机XML文件
  • 华为云征文|部署私有云和文档管理系统 Kodcloud
  • 利用流水线实现版本一键发布
  • 【生日视频制作】奔驰梅赛德斯小汽车提车交车仪式AE模板修改文字软件生成器教程特效素材【AE模板】
  • 【精选】基于Hadoop的热点事件分析的设计与实现(全网最新定制,独一无二)
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • deepin(深度)社区亮相2024 RISC-V中国峰会,全力推动RISC-V生态发展
  • Python中的“for循环”:探索其无限潜力
  • 别让努力付之东流!私域增长停滞不前的7大冲突解析
  • ThermoParser 介绍
  • 【设计模式-代理】
  • Java算法之选择排序(Selection Sort)
  • 神经网络—卷积层
  • Zookeeper的监听机制及原理解析
  • Selenium 自动化测试框架 API 详解
  • Nginx中的权重轮询机制:实现高效负载均衡
  • 使用Lora微调LLM——笔记
  • EmguCV学习笔记 VB.Net 第9章 视频操作
  • maven的5种打包方式:springboot-maven-plugin详解
  • 故障诊断 | 基于小波时频图与Swin Transformer的轴承故障诊断方法(PyTorch)
  • 4.2 python获取单元格的属性
  • 单片机-串口通信(二)
  • .NET Razor类库 - 静态资源组件化
  • Zoom iOS 转录例子