作为一个想做架构师的程序猿,必须是一个优秀的程序猿。在引入某一个框架的时候,必需要研究源代码,将新的开源框架的风险变为可控性。


1.Spring结合Mybatis最经常使用的配置。

<!--理论加实践,才是架构师嘚最佳实践 -->
        <!--JDBC
Data Source -->
        <bean id= "testdataSource"
               class= "org.springframework.jdbc.datasource.DriverManagerDataSource" >
               <property name= "driverClassName" value="oracle.jdbc.driver.OracleDriver" />
               <!--
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
                     /> -->
               <property name= "url" value="jdbc:oracle:thin:@192.168.137.101:1521:ora92" />
               <property name= "username" value ="sale" />
               <property name= "password" value ="sale" />
        </bean>

        <bean id= "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
               <property name= "dataSource" ref ="testdataSource" />
               <property name= "mapperLocations">
                      <list>
                             <value> classpath:com/etrading /mapping/**/*Mapper.xml</ value>
                      </list>
               </property>
               <!--
<property name="typeAliasesPackage" value="com.nicchagil.mybatis3spring3intg.bean"
                     /> -->
        </bean>

        <bean class= "org.mybatis.spring.mapper.MapperScannerConfigurer" >
               <property name= "basePackage"
                      value= "com/etrading/mapping/common;com/etrading/mapping/account" />
               <property name= "sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        </bean>
1)Spring为了整合Mybatis,专门封装了一个jar包(mybatis-spring-1.2.3.jar),当中MapperScannerConfigurer封装了自己主动扫描全局路径下的Mapper
2)MapperScannerConfigurer源代码分析(基于mybatis-spring-1.2.3.jar)
   事实上要弄通源代码,一定要弄通spring容器源代码,这个是基础(理解框架设计的思想,事实上非常多代码思想是能够复用的)
   简单的梳理下Spring容器思想:
        Spring容器环境起来-->通过refresh()方法刷新容器(比較简洁)
   MapperScannerConfigurer就是在刷新容器的过程中自己主动的运行方法postProcessBeanDefinitionRegistry
     /**
   * {@inheritDoc}
   * 通过Spring容器触发postProcessBeanDefinitionRegistry
   * @since 1.0.2
   */
  @Override
  public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry
registry) {
    if ( this. processPropertyPlaceHolders )
{
      processPropertyPlaceHolders();
    }

    //核心处理类ClassPathMapperScanner,通过反射机制载入注解bean到spring容器
    ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
    scanner.setAddToConfig( this .addToConfig );
    scanner.setAnnotationClass( this .annotationClass );
    scanner.setMarkerInterface( this .markerInterface );
    scanner.setSqlSessionFactory( this .sqlSessionFactory );//不须要在xml中设置sqlSessionFactory以及sqlSessionTemplate
    scanner.setSqlSessionTemplate( this .sqlSessionTemplate );
    scanner.setSqlSessionFactoryBeanName( this .sqlSessionFactoryBeanName );
    scanner.setSqlSessionTemplateBeanName( this .sqlSessionTemplateBeanName );
    scanner.setResourceLoader( this .applicationContext );
    scanner.setBeanNameGenerator( this .nameGenerator );
    scanner.registerFilters();
    //真正自己主动化扫描的类
    scanner.scan(StringUtils. tokenizeToStringArraythis. basePackage,
ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS ));
  }

孜孜不倦、厚积薄发。
                           ----胡弦语录

Mybatis结合Spring注解自己主动扫描源代码分析的更多相关文章

  1. Spring4.0MVC学习资料,注解自己主动扫描bean,自己主动注入bean(二)

    Spring4.0的新特性我们在上一章已经介绍过了. 包含它对jdk8的支持,Groovy Bean Definition DSL的支持.核心容器功能的改进,Web开发改进.測试框架改进等等.这张我们 ...

  2. 【Spring实战】Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  3. 【转】【Spring实战】Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  4. SpringMVC 之类型转换Converter 源代码分析

    SpringMVC 之类型转换Converter 源代码分析 最近研究SpringMVC的类型转换器,在以往我们需要 SpringMVC 为我们自动进行类型转换的时候都是用的PropertyEdito ...

  5. 3.IDEA+Maven+Spring注解+Servlet+MyBatis

    1.创建项目模块 2. 选择创建的项目类型,maven的web项目 3.输入项目名 4.选择自己配置的本地maven库 5.创建项目 6.查看项目结构 7.配置项目的依赖pom.xml <?xm ...

  6. Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?

    阅前提醒 全文较长,建议沉下心来慢慢阅读,最好是打开Idea,点开Spring源码,跟着下文一步一步阅读,更加便于理解.由于笔者水平优先,编写时间仓促,文中难免会出现一些错误或者不准确的地方,恳请各位 ...

  7. Spring自动装配与扫描注解

    1 javabean的自动装配 自动注入,减少xml文件的配置信息. <?xml version="1.0" encoding="UTF-8"?> ...

  8. Spring异常累计(1)Spring注解与扫描,NoUniqueBeanDefinitionException

    spring中可以使用注解机制,代替传统的在xml中配置一个bean. 如 <pre name="code" class="java">@Compo ...

  9. Spring - 基于注解的组件扫描

    关于Spring的书籍都会花很大篇幅来讲解Spring如何注入各种bean的问题,非常令人头疼,自己在工作中还从来没有用到过. 所以就要跳过那些篇章,直接学习基于注解的组件扫描. 发现spring2是 ...

随机推荐

  1. Drainage Ditches(网络流(EK算法))

    计算最大流,EK算法模板题. #include <stdio.h> #include <string.h> #include <queue> using names ...

  2. Appium + python - get_attribute获取value操作

    from appium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.w ...

  3. 浅谈自学Python之路(day2)

    今天的主要内容是: 标准库 数据类型知识 数据运算 三元运算 bytes类型 字符串操作 字典 集合 标准库 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有 ...

  4. Hadoop一主一从部署(2)

    Hadoop部署一主一从(2) 1.关闭防火墙和Linux守护进程 执行命令: iptables -F setenforce 0 2.对Hadoop集群进行初始化,在namenode(主机)上执行命令 ...

  5. 2015 多校赛 第七场 1011 (hdu 5379)

    题意:给定一棵树,树上有 n 个节点.问有多少种方案,使得在每个节点上依次放置数 1~n 后,每个节点的儿子节点上的数连续(比如 1 为根,有1-2,1-3,1-4,则令2,3,4上的数连续),每个子 ...

  6. C#之密封类(详解)

    10.3  密封类与密封方法 如果所有的类都可以被继承,那么很容易导致继承的滥用,进而使类的层次结构体系变得十分复杂,这样使得开发人员对类的理解和使用变得十分困难,为了避免滥用继承,C#中提出了密封类 ...

  7. C#开发微信公众号——网页开发之微信网页授权

    首先咱们先看下公众号的文档里面的介绍 上述图片的文字描述就是讲述了网页授权有什么用,就是为了获取微信用户的基本信息:授权回调域名的规范,说到域名回调的事情就不得不提一下设置网页授权域名 最好将这三个域 ...

  8. Spring Boot (16) logback和access日志

    Spring Boot 内部采用的是Commons Logging进行日志记录,但是在底层为Java Util Logging.Log4J2.Logback等日志框架提供了默认配置. logback ...

  9. spring jdbc、事务(三)

    spring整合jdbc spring中提供了一个可以操作数据库的对象(JDBCTemplate),对象封装了jdbc技术. 1.使用spring整合jdbc需要jdbc驱动.c3p0连接池.spri ...

  10. for 循环练习题(2)

    一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 var x=0.0001; for(var a=1;true;a++){ x=x*2; if (x>8848) { ...