這里考慮的是mybatis和spring整合的場景
1.在系統啟動的時候,會去執行配置文件中有關掃描mybatis接口的配置:通過MapperScannerConfigurer掃描接口生成spring特定的描述交給MapperProxyFactory管理,可能以后要用它生成代理對象
2.初始化SqlSessionFactoryBean。
首先判斷mybatis.xml中是否配置了mapper屬性,
如果配置了:
通過XMLConfigBuilder中的mapperElement()方法解析mapper接口放到configration中;
如果沒有:
再判斷是否配置mapperlocations路徑也就是mapper.xml所在的路徑
如果配置了:
會根據namespace找到接口,然后通過 XMLMapperBuilder中的bindMapperForNamespace()方法添加到configration中
如果沒有配置:
在需要用到mapper代理時,就會通過包掃描獲取mapper信息,解析mapper,然后放到configration中
3.configration添加mapper接口的過程
通過mapper Registry 中的addMapper()方法
4.通過接口信息去加載對應的xml,同時會校驗對應xml配置是否正確。通過MapperAnnotationBuilder的parse()去判斷xml是否加載,如果沒有就調用其中額loadXMLResource()方法就行加載,同時將接口中的方法和sql通過id屬性就行關聯
5.最后通過jdk代理生成代理對象存到configration中,已被調用