mybatis-spring如何做到接口編程的

What is MyBatis-Spring Not Spring-Mybatis?官方介紹

        第二版那樣,Spring 3.0 也僅支持 iBatis2。那麼,我們就想將 MyBatis3 的支持添加 到 Spring3.0(參考 Spring Jira 中的問題)中。而不幸的是,Spring 3.0 的開發在 MyBatis 3.0 官方發佈前就結束了。 因爲 Spring 開發團隊不想發佈一個基於非發佈版的 MyBatis 的整合支 持,那麼 Spring 官方的支持就不得不繼續等待了。要在 Spring 中支持 MyBatis,MyBatis 社 區認爲現在應該是自己團結貢獻者和有興趣的人一起來開始將 Spring 的整合作爲 MyBatis 社 區的子項目的時候了
一.spring 的配置
注入映射器有兩種方法
1.每個都搞一個,這個比較坑,可以選擇忽略
2.配置路徑然後全局掃描

上面那個雖然不容,但是可以告訴我們他是如何做的
二.註冊
我們來看MapperScannerConfiguer,主要就是doScan

這個裏面其實還是用了MapperFactoryBean


他把每個接口,用MapperFactoryBean 生成代理之後註冊到spring
而MapperFactoryBean 是如何做的呢
MapperFactoryBean.getObject()---->SqlSessionTemplate.getMapper()--->Configuration.getMapper()
-----MapperRegistry.getMapper()----->MapperProxyFactory.newInstance()
經過了幾層之後總算到了代理實現類 返回了我們的接口代理類MapperProxy計算註冊完成了
3.執行
執行肯定是從MapperProxy.invoke方法開始.
然後mybatis根據xml配置文件或者方法的註解,的類型,這類涉及一個十分重要的類MapperMethod

這裏mybatis就根據不同的返回類型,已經配置的不同類型,執行SqlSessionTemplate不同的方法
SqlSessionTemplate 再最後調用下執行方法然後就ok了,但是這裏SqlSessionInterceptor攔截這個請求,然後統一處理了下
就這樣,我們的接口編程就完成


這個原理倒是很簡單,只不過,當初自己只是從mybatis-spring入手,看了需求沒有發現如何實現,後來斷點才觀察到了整個過程,
希望給大家理解下吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章