MyBatis源碼解析2-MapperRegistry

MapperProxy只會在mapper(dao)的方法被調用的時候,纔會去調用invoke() 方法
發現MapperProxy#nvoke(Object proxy, Method method, Object[] args)每次都會被調用


MapperRegistry只會在SpringBoot應用啓動的過程中會調用addMapper()和getMapper()方法,
在mapper方法被用戶調用的時候,並不會去調用addMapper和geMapper這兩個方法。

getMapper()會執行Proxy.newProxyInstance(); 產生一個proxyClass的對象

newProxyInstance會維持一個二級緩存, k,p, v

k:classLoader
p: interfaces[]
v: ProxyClass (例如$Proxy0, $Proxy1)

注意:這裏緩存的是代理類 class,而不是對象
一般的個體M apper() 獲取到的對象的類名比如爲$Proxy55 是代理類的生成的對象。

關於MapperFactoryBean

在這裏插入圖片描述
估計siSingleton== true的裏面的getBean()只會被調用一次。

public boolean isSingleton() :該方法返回結果用於表明,getObject()創建的對象是否要以singleton(單例)形式存於容器中。如果以singleton形式存在,則返回true,否則返回false
說明isSingleton return true的時候, Spring容器會把這個bean以單例等形式註冊到Baen容器中去.也就是這個getBean()方法只會被調用一次。 第二次直接從Spring容器中讀取緩存即可

連載列表
MyBatis源碼解析1-全局熟悉源碼

MyBatis源碼解析2-MapperRegistry

MyBatis源碼解析3-MapperFactoryBean

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