标准的springboot接入mybatis步骤
1.引入了对应的依赖包
2.应用的properties下增加相应配置
3.根据配置进行自动装配
一般我们会配置这些信息,主要包括三类 1.数据库的连接信息 2.指定的数据源类型 3.mybatis的配置信息
配完以后,当你启动SpringBoot的主类就会开始进行自动装配,主要出发点还是基于@SpringBootApplication组合注解里面的注解来做自动装配,但是本次简介核心只讲数据源装配的过程所以这里略过,装配核心就是各类XXXAutoConfiguration类,我们来看看数据源的装配过程。第一个核心类是org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration,这个是自动装配数据源的类,核心就是里面声明了一个静态的内部类org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.Generic
这个静态内部类会基于@ConditionalOnProperty(name = “spring.datasource.type”)然后根据我们配置里面的com.alibaba.druid.pool.DruidDataSource来进行装配
这里其实就是通过反射创建出对应数据源的Class对象,然后再通过Class对象反射生成对应的实例
那么到这里,datasource数据源装配已经有了,接下来的就是关键的事务管理器与事务模板是在何处进行自动装配的,我们通常会在需要控制事务代码的地方这样来注入事务模板
但是大家有没有想过一个问题,这个template是谁来帮你注入的?他管理的究竟又是哪个数据源?带着这样的问题我们继续向下走。
最开始我其实有跟大家说过,自动装配其实无非就是各类XXXAutoConfiguration类,那么这里既然是事务,那一定是有一个叫TransactionalAutoConfiguration或者跟这个名字很相近的类,带着这个方向我们来找一下这个类
接下来我们看看这个类里面会做些什么,当你打开之后你就会看到,这样的一段代码,原来就是在这里进行了事务模板的装配
那么接下来又有一个问题了,我们知道用@bean定义的方法,如果方法参数有值,那么是需要从容器当中去寻找这样的一个bean的,那么下一个问题就出现了org.springframework.transaction.PlatformTransactionManager这个类又是何时被spring加到的容器当中的?
ok,继续回到灵感点,那么是否会有一个类似于叫TransactionManagerAutoConfiguration的类呢?带着这样的问题我们继续向下寻找,果不其然,确实是有一个跟这个名字很相近的类
打开一看,果然就是在这里注入的事务管理器,同时这个事务管理器的注入也需要一个dataSource的bean,这个回到我们开头,其实就已经跟大家说清楚了数据源是如何在哪里进行注入的,然后因为我们没有配置spring.dao.exceptiontranslation.enabled为false,所以这里注入的就是org.springframework.jdbc.support.JdbcTransactionManager,所以,当我们只是基于配置进行最简单的装配时,使用的transactionTemplate内嵌的事务管理器就是JdbcTransactionManager
那么到这里,我们已经说完了javax.sql.DataSource以及org.springframework.transaction.PlatformTransactionManager以及org.springframework.transaction.support.TransactionTemplate的自动装配了,所以我们才能在类中去注入对应的TransactionTemplate来做编程式事务的控制