【mybatis框架学习】三、invoke方法逻辑编排

上一篇一直有提高一个词,编排。

都说编程,编程,编排也就容易理解了。

 

像我们常用的框架,spring、mybatis,都是将一些固有的流程,简化,抽象,编排起来,在留有可拓展的接口之后,全部封装好,让我们不用再去关心具体细节

编排这件事也就变得可以充满神秘感,等待我们去了解。动态代理的invoke方法,就是一个很容易作为编排入门练手的东西

 

invoke方法中,针对Method实例最常用的操作就是获取其name属性,也就是当前被调用的方法名称,此时可以用最粗暴的if、switch语句,依据方法名称进行任意不同的逻辑处理

 

然后我们来看看,在mybatis中是如何使用动态代理的:

org.apache.ibatis.binding.MapperRegistry中,通过getMapper方法,可以获取到动态代理创建的接口实例,基本上它就是离我们日常使用很近的一个方法了

可以看到,入参传入了mapper接口类,然后尝试以此为key去内部的HashMap中获取代理类的工厂类,最后通过工厂类完成实例化操作

 

 

 

上方提到的那个内部HashMap,就是通过解析配置sql语句的xml,完成内容初始化的

如图所示,其中namespace字段配置值对应了mapper接口的全类名,id字段配置值对应了方法名

偷瞄一下可以看到MapperRegistry中的addMapper方法,初始化就是根据mapper接口类构造了一个MapperProxyFactory实例

 

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