首页 > 其他分享 >深入解析 Spring Boot 中 MyBatis 自动配置的流程

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

时间:2024-08-30 14:51:16浏览次数:13  
标签:Spring 配置 Boot 自动 MyBatis class

在 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. 自动配置类是什么?

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

标签:Spring,配置,Boot,自动,MyBatis,class
From: https://blog.csdn.net/weixin_54574094/article/details/141717652

相关文章

  • SpringBoot原理
    目录一、配置优先级二、Bean管理1.获取Bean(1)三种方式(2)获取示例 2.Bean作用域 3.第三方Bean 三、SpringBoot原理1.起步依赖2.自动配置(1)概述(2)准备工作 (3)@Import (4)模拟过程3.自动配置原理(1)源码跟踪 (2)@Conditional (3)自定义start业务场景需求 步骤具......
  • 二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)
    二.SpringBoot中的“依赖管理和自动配置”详解透彻到底(附+详细代码流程)@目录*二.SpringBoot中的“依赖管理和自动配置”详解透彻到底(附+详细代码流程)1.如何理解“约定优于配置”2.SpringBoot依赖管理和自动配置2.1SpringBoot的依赖管理2.1.1什么......
  • MyBatis启动报Cause: org.apache.ibatis.builder.BuilderException: Error resolving
    mybatis-plus:**#搜索指定包别名,对指定报名下的所有实体进行Alias,就可以在mapper.xml中使用alias来设置parameterType参数**typeAliasesPackage:com.rcs.**.domain**#配置mapper的扫描,找到所有的mapper.xml映射文件,对该目录下的所有mapper.xml进行扫描装入Mappers......
  • Spring security的SecurityConfig配置时 userDetailsService报错如何解决?
    文章目录报错信息原因解决方案1.实现`UserDetailsService`接口修改`IUsersService`接口和实现类2.修改`SecurityConfig`3.其他注意事项报错信息‘userDetailsService(T)’in‘org.springframework.security.config.annotation.authentication.builders......
  • Spring EL表达式使用详解
    SpringEL表达式使用详解什么是SpringEL表达式SpringEL表达式是Spring表达式语言,支持在xml和注解中使用表达式,类似于JSP的EL,JSTL表达式语言。Spring开发中我们会经常涉及到调用各种资源的情况,包含普通文件、网址、正则表达式、系统变量、其他Bean的一些属性、配置文件、集......
  • 基于SpringBoot+Vue足球俱乐部管理后台的设计和实现(源码+文档+部署讲解)
    博主介绍:全网粉丝10W+,CSDN博客专家、全栈领域优质创作者,3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型。研究方向:SpringBoot、Vue.JS、MyBatisPlus、Redis、SpringSecurity、MySQL、小程序、Android、Uniapp等。博主说明:本文项目编号......
  • 基于SpringBoot+Vue师生健康管理系统的设计和实现(源码+文档+部署讲解)
    博主介绍:全网粉丝10W+,CSDN博客专家、全栈领域优质创作者,3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型。研究方向:SpringBoot、Vue.JS、MyBatisPlus、Redis、SpringSecurity、MySQL、小程序、Android、Uniapp等。博主说明:本文项目编号......
  • 大学生班级|基于SprinBoot+vue的大学生班级管理系统(源码+数据库+文档)
    大学生班级管理系统基于SprinBoot+vue的大学生班级管理系统一、前言二、系统设计三、系统功能设计 系统功能实现后台模块实现管理员功能实现教师功能实现学生功能实现四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博......
  • Springmvc中的处理器、拦截器、过滤器的执行时机
    Springmvc中的处理器、拦截器、过滤器的执行时机测试案例:publicclassMyFilterimplementsFilter{@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{System.out.println("--->>MyFilter.init");}@Override......
  • spring boot 以请求来调用Ollama大模型,不使用spring ai
    之前有一版使用springai的,但是其实Ollama有一套api可以直接调用。api地址是https://github.com/ollama/ollama/blob/main/docs/api.md我们聊天其实调用的就是这个(其余的我就不赘述了,大家自行研究)调用http请求这方面,大家可自行编写,请求的方式五花八门,网上的库......