• Mybatis源码解析(二)


    根据上篇的代码跟踪mybatis已经ready好

    SqlSessionFactory了,下面就是我们怎么去通过这个factory去获取sqlSession会话了,继续扒源码;

    mybatis-spring-2.0.0.jar

    入口在这里,加载scan扫描:

    <!-- spring与mybatis整合配置,扫描所有dao,指定的映射器类是接口,接口方法可以用注解来指定 SQL 语句,但是 MyBatis 的映射器 XML 文件也可以用。 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
              p:basePackage="com.cloudwalk.shark.mapper"
              p:sqlSessionFactoryBeanName="sqlSessionFactory"/>

    上源码,首先看这个类实现了哪些接口,有哪些属性:

    public class MapperScannerConfigurer implements BeanDefinitionRegistryPostProcessor, InitializingBean, ApplicationContextAware, BeanNameAware {}
        private String basePackage;
        private boolean addToConfig = true;
        private SqlSessionFactory sqlSessionFactory;
        private SqlSessionTemplate sqlSessionTemplate;
        private String sqlSessionFactoryBeanName;
        private String sqlSessionTemplateBeanName;
        private Class<? extends Annotation> annotationClass;
        private Class<?> markerInterface;
        private ApplicationContext applicationContext;
        private String beanName;
        private boolean processPropertyPlaceHolders;
        private BeanNameGenerator nameGenerator;
    这个sqlSessionFactory就是mybatis中一系列初始化设置后获得到的factory;

    集成Spring原理解析
    与Spring集成可以分为3个步骤.
    1. 把Java类对应的Mapper接口类纳入Spring中的IOC容器管理。
    2. 把Java类对应的XML命名空间添加到Mybatis中的Configuration类中的mapperRegistry(用于管理Mybatis的Mapper).
    3. 使用Spring中的IOC容器扩展FactoryBean获取到Mapper的实例。(第一步纳入Spring只是接口)

    1.纳入SpringIOC容器管理

    上面时序图的主要步骤:

    利用Spring的扩展BeanFactoryPostProcessor,扫描指定包下面的Mapper类,把类转换成Spring中IOC的Bean对象BeanDefinition,然后注册到IOC容器。并把BeanDefinition的BeanClass替换为MapperFactoryBean.class,这是一个Spring中的FactoryBean.这就和后面第三步的获取Mapper实例结合起来了。具体的代码如下:

  • 相关阅读:
    weixueyuanNginx日志管理与监控8
    w3cschoolNetty 实战精髓篇2
    weixueyuanNginx集群9
    Java IO之 Netty与NIO服务器NIO中的零拷贝
    weixueyuanNginx在Kubernetes10
    CString内容转为16进制unsigned char
    为 Windows 驱动编译静态 lib 库
    makefile编译静态库或动态库,遍历所有源文件
    线程安全
    三十六、Promise
  • 原文地址:https://www.cnblogs.com/longxok/p/10876819.html
Copyright © 2020-2023  润新知