MyBatis源码解读(2)——MapperProxy

上篇文章,解析了SqlSession 的创建过程,本章延续上章的内容,接着SqlSession 来讲解MapperProxy。

1、通过sqlSession 调用getMapper() 方法,来解析过程。

接着上一篇讲到通过 DefaultSqlSessionFactory 可以得到一个 SqlSession 的实例 DefaultSqlSession 。

通过 DefaultSqlSession 中的 getMapper() 方法来得到mapper 。

UserMapper仅仅是一个接口,这里会涉及到Java的动态代理。通过打断点调试我们可以发现确实产生了一个叫MapperProxy的代理类。

在getMapper()的方法中调用的是 Configuration 的 getMapper() 方法。那为什么会产生 MapperProxy代理类呢?

下面来解析 MapperProxy 类的产生过程?接着上面继续分析。

1.、点击getMapper() 方法 ,进入到 Configuration 类的getMapper() 方法。

2、接着进入到了接口注册类 MapperRegistry 中的getMapper() 中,在方法中创建了mapperProxyFactory 代理工厂。

3、点击 mapperProxyFactory 的 newInstance(sqlSession) 方法,进入到 MapperProxyFactory 代理工厂类。

   发现在 newInstance() 方法中创建了 MapperProxy 的代理对象。

到此 MapperProxy 的产生过程就结束了。

总结: Configuration.getMapper() --》MapperRegistrygetMapper() --》mapperProxyFactory.newInstance()  --》MapperProxy

 

在 MapperProxy 的解析过程中,本人产生了一个疑问Mapper 接口是在什么时候注入到了MapperProxyFactory 中。

1、通过代码发现在 SqlSessionFactory 的build() 方法中有配置文件的解析方法。

2、在 XMLConfigBuilder 类的 mapperElement() 方法中把接口对象注入到了 configuration 类中。

3、接着在 Configuration 类中把接口对象添加到了 MapperRegistry 类中。

4、在 MapperRegistry 类的addMapper 方法中将 mapper接口注入到 MapperProxyFactory 代理工厂类中。

到此mapper接口在什么时候,在什么地方注入到 MapperProxyFactory 类的过程,已经讲完了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值