Mybatis源碼分析(二):源碼分析入口引導

若是沒看Mybatis源碼分析(一):源碼準備工做,再看本節

 

1. 引導進入spring的源碼

 

首先是mybatis對  xml文件 進行解析,那麼這個解析的關鍵配置就是php

 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="mapperLocations">

   <value>classpath*:com/zzy/xml/*Mapper.xml</value>

</property>

</bean>

以上配置org.mybatis.spring.SqlSessionFactoryBean這個類是解析xml文件的核心類,這個類中有不少屬性,也就是property其中mapperLocationsxml文件掃描的屬性類引用,其餘屬性在源碼中進一步分析!spring

 

若是您使用的是eclipse,那麼Ctrl+鼠標左鍵【提早是你已經下載了mybatis相關源碼】進入SqlSessionFactoryBean以下圖:sql

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 

這個類實現了InitializingBean接口mybatis

 

題外話:app

這個核心類在mybatis那個jar中呢,以下圖:eclipse

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

能夠看到在mybatis-spring這個jar的最外層!ide

 

2. IntializingBean這個接口作簡單說明

 

這個類後期還會在spring源碼分析中細講這裏只說明這個類的做用源碼分析

 

做用:spring中bean實例化和依賴注入完成之後,作一些後續的初始化工做,實現IntializingBean這個接口,必須重寫其中的afterPropertiesSet這個方法!以下圖簡單看看這個接口的內容:
ui

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

3. 回到sqlSessionFactory類中看看其afterPropertiesSet中作哪些事情呢?

 

回到spring的源碼分析上,上文說了SqlSessionFactoryBean實現了InitializingBeanafterPropertiesSet咱們在SqlSessionFactoryBean中找下這個方法,Ctrl+O:this

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 

點擊調到該方法

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

其中咱們須要關注的代碼段是:

 

this.sqlSessionFactory = buildSqlSessionFactory();

 

 notNull(dataSource, "Property 'dataSource' is required");

    notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");

    state((configuration == null && configLocation == null) || !(configuration != null && configLocation != null),

              "Property 'configuration' and 'configLocation' can not specified with together");

這些都是對必須配置屬性的異常處理。

 

其中buildSqlSessionFactory()這個方法是咱們研究的核心!

 

4. SqlSessionFactoryBean有哪些屬性呢?

 

SqlSessionFactoryBean屬性也就是

 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="mapperLocations">

   <value>classpath*:com/zzy/xml/*Mapper.xml</value>

</property>

</bean>

 

 

下可配置的property 有哪些呢?以下源碼(其中mapperLocations dataSource常常用到的,其餘有些事ibatis原有,爲了保持兼容性,不少基本不用了)下節對經常使用屬性作簡單介紹

 

 

private Resource configLocation;

 

  private Configuration configuration;

 

  private Resource[] mapperLocations;

 

  private DataSource dataSource;

 

  private TransactionFactory transactionFactory;




  private Properties configurationProperties;

 

  private SqlSessionFactoryBuilder sqlSessionFactoryBuilder =   new SqlSessionFactoryBuilder();

 

  private SqlSessionFactory sqlSessionFactory;

 

  //EnvironmentAware requires spring 3.1

  private String environment =    SqlSessionFactoryBean.class.getSimpleName();

 

  private boolean failFast;

 

  private Interceptor[] plugins;

 

  private TypeHandler<?>[] typeHandlers;

 

  private String typeHandlersPackage;

 

  private Class<?>[] typeAliases;

 

  private String typeAliasesPackage;

 

  private Class<?> typeAliasesSuperType;

 

  //issue #19. No default provider.

  private DatabaseIdProvider databaseIdProvider;

 

  private Class<? extends VFS> vfs;

 

  private Cache cache;

 

  private ObjectFactory objectFactory;

 

  private ObjectWrapperFactory objectWrapperFactory;

以上配置的屬性最終都會被3點buildSqlSessionFactory()方法讀取到

,而後對相關屬性的配置處理!截圖簡單看看,怎麼處理這些屬性呢?舉例看下mapperLocations dataSource

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

以上截圖來自buildSqlSessionFactory這個方法,下節源碼分析該方法以及相關配置屬性的說明!

相關文章
相關標籤/搜索