首先是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,其中mapperLocations對xml文件掃描的屬性類引用,其餘屬性在源碼中進一步分析!spring
若是您使用的是eclipse,那麼Ctrl+鼠標左鍵【提早是你已經下載了mybatis相關源碼】進入SqlSessionFactoryBean,以下圖:sql
這個類實現了InitializingBean接口mybatis
題外話:app
這個核心類在mybatis那個jar中呢,以下圖:eclipse
能夠看到在mybatis-spring這個jar的最外層!ide
這個類後期還會在spring源碼分析中細講,這裏只說明這個類的做用。源碼分析
做用:spring中bean實例化和依賴注入完成之後,作一些後續的初始化工做,實現IntializingBean這個接口,必須重寫其中的afterPropertiesSet這個方法!以下圖簡單看看這個接口的內容:
ui
回到spring的源碼分析上,上文說了SqlSessionFactoryBean實現了InitializingBean的afterPropertiesSet,咱們在SqlSessionFactoryBean中找下這個方法,Ctrl+O:this
點擊調到該方法
其中咱們須要關注的代碼段是:
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()這個方法是咱們研究的核心!
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
以上截圖來自buildSqlSessionFactory這個方法,下節源碼分析該方法以及相關配置屬性的說明!