【mybatis框架学习】四、动态代理类的工厂类及核心纽带

工厂类也是一个很常见的设计模式,隐藏细节,包装流程,所以动态代理对应的定义一个工厂类也很正常。

工厂类的工作一向很简单,得到mapper接口类之后,再传给实际的动态代理类进行初始化即可,针对Proxy的方法调用也被写在这里

methodCache的作用我们需要结合动态代理类MapperProxy来了解

 

MapperProxy内部就开始知识点激增了,学习过程就得只关注核心内容

上面看到是工厂类将内部的methodCache传入到MapperProxy的构造函数的,实际上可以理解为MapperProxy的实例的某些内容被放到methodCache里面缓存起来了,方便复用

 

当MapperProxy的invoke方法被调用时,我们直接关注cacheInvoker方法的调用,它通过访问methodCache尝试返回一个可被复用的MapperMethodInvoker接口的实例

 

mapper接口类、当前要调用的方法描述信息Method和sqlsession中的configuration(先忽略它是干嘛的)被用来初始化MapperMethod

MapperMethod又被用于初始化PlainMethodInvoker

PlainMethodInvoker才是MapperMethodInvoker接口的实际实现类

 

 

 

 

 

 

最终PlainMethodInvoker的invoke方法被调用,一切调用被传递到MapperMethod的execute方法,此时的入参只有sqlSession实例,和方法调用入参
我们可以看到,工厂类、代理类、内部接口、内部接口实现类,全部都服务于MapperMethod,它才是mybatis将sql语句执行,与mapper接口调用关联起来的核心纽带

 

 

posted @ 2022-10-01 18:01  rebeLdanceR  阅读(78)  评论(0编辑  收藏  举报