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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值