MybatisAutoConfiguration 分析

    xiaoxiao2022-07-07  226

    MybatisAutoConfiguration 是spring boot 下 mybatis 默认的配置类,只要开启了注释了 @EnableAutoConfiguration 就可以了,spring boot 会默认执行。在spring boot 启动的过程中 @SpringBootApplication 中组合了 EnableAutoConfiguration ,属于spring boot 自动配置和启动过程,相关内容以后有空了慢慢写。这里先看 MybatisAutoConfiguration 。 先看构造函数参数,有mybatis 的配置文件,有mybatis 的插件,有 DatabaseIdProvider ,也有ConfigurationCustomizer。其中 插件和DatabaseIdProvider 属于mybatis 自带的内容,ConfigurationCustomizer 属于 mybatis-spring包中的接口。插件主要是提供类似拦截器的功能,通过动态代理可以拦截 executor、statementHandler、ResultSetHandler、ParameterHandler 这些类中的某些方法点。可以看我之前mybatis的文章。DatabaseIdProvider 主要是用来根据不同的数据库筛选不同的sql语句,通过设置 statement sql 节点上来实现。具体的可以看我之前 mybatis 的文章或者订阅我的gitchat。mybatis sql 解析。 这里主要看一下 ConfigurationCustomizer 主要是提供一个接口可以获取 mybatis 的 configuration 或者更改 configuration 中的属性,比如向configuration 中注册插件。比如出名的分页插件 PageHelpler 就是通过实现这个接口来获取configuration并且注册了拦截器。来拦截sql处理分页逻辑。 在这个类里面配置了两个Bean,分别是 SqlSessionFactory,SqlSessionTemplate。跟我们之前在 xml文件中配置的一样。在生成 SqlSessionFactory 的时候调用了ConfigurationCustomizer,提供了接口供我们回调。 其余的都是设置属性,没有太多可以说的。 看最下面 如果在容器中没有 MapperFactoryBean ,就导入AutoConfiguredMapperScannerRegistrar 配置类。MapperFactoryBean 是在什么地方放入容器的。如果看过之前的文章就知道如果在启动类上设置了 @MapperScan 这个注解,导入了 MapperScannerRegistrar 配置类就会在容器中注入 MapperFactoryBean。也就是说如果我们在启动类上注解了 MapperScan 那么 AutoConfiguredMapperScannerRegistrar 类就不会被导入,如果没有设置那么 AutoConfiguredMapperScannerRegistrar 就会被导入。看看 AutoConfiguredMapperScannerRegistrar 到底干了什么。 干的事情很简单 主要是通过 ClassPathMapperScanner 来扫描标记了 @Mapper 的接口,针对这些接口生成 GenericBeanDefinition,并且将这些 GenericBeanDefinition 的class设置为 MapperFactoryBean,通过这个FactoryBean 生成接口的动态代理。剩下的就和之前分析的一样了,这里不再赘述。

    最新回复(0)