Mybatisの実現原理

1478 ワード

springが起動する時、springは私達の配置したmapper.xmlに関する経路に従ってこのルートのxmlファイルをロードし、Listの集合を得て、この集合をResource[]配列に変換してSql Session FactoryBernのmapperLocationsに移動します.
現在の位置を持つこれらのmapperの配置ファイルはSql Session FactoryBenに維持され、Sql Session FactoryBenのget Object()方法はbuildSql Session Factory()方法によってSql Session Factoryを作成します.XMLConfigBuilderオブジェクトを作成して、configrationタイプのオブジェクトを取得します.このオブジェクトは非常に重要です.後に使用します.その後、mapperLocationsを循環して、XMLMapperBuiderを使って、各mapperLocationsのストリームをdocumentオブジェクトに解析して、XMLMapperBuiderのparseを呼び出します.方法は、documentオブジェクトの各結点を解析し、オブジェクトを生成します.もちろん、このresourceを解く際には、configrationオブジェクトの中にこのresourceがすでに存在しているかどうかを判断します.もし解析しないなら、解析した各サブノードをconfigurationに入れます.udateなどの結点は、Map mapped Sttementsのmapに維持されます.keyはnamespaceにタグを付けたidです.(例えば、comp.org.userMapper.selectOneがkeyの一意性を保証するためです.)、valueに保存されているMappedSttementの対象は、sqlタグの解析結果はここになります.その後、configrationをパラメータとしてDefault Sql Session FactoryによりSqlsessitionFactoryのインスタンスオブジェクトを作成します.解析に失敗した場合はループ処理を行います.最後に、configrationの一つのタイプはMapperRegistryオブジェクトに保存されます.mapperRegistry
addmapper方法を呼び出してこのmapperを一つのMapにメンテナンスします.Mapper ProxyFactory>>knownMappers=new HashMap()の中で、このknownMappersはとても重要です.彼はインターフェースを呼び出す時に動的エージェントを通してmapperインターフェースのインスタンスを取得します.sqlプロセッサは、その後、適切な実行器を選択し、最後に実行結果プロセッサに結果を渡してsqlsessionに戻ります.
 
ダイナミックエージェントのプロセス
インタフェースのcassファイルタイプを通じてknownMappersからmapperの代理工場を取得し、MapperProxyFactoryで工場シンクロ用newInstance()でsqlsessionのインスタンスとインターフェースのタイプ、そしてmethodCachでMapperProxyの例を取得し、更にjdkダイナミックエージェントを通して代理クラスを生成したいです.