调用MapperProxy对象|学习笔记

简介: 快速学习调用MapperProxy对象

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术调用MapperProxy对象学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15950


调用MapperProxy对象

 

调用的时候我们拿到的是一个 Map proxy,无论调接口的哪一个方法,它都是调的这个 map proxy的方法,这个才是用动态的代理机制来完成的。

image.png

无论你调这个接口的任何一个方法,他会传三个参数。所以你无论调他的哪一个方法,它的差别就是这个方法是不同的,参数是不同的,然后来调这个,Mapproxy的 invoke的方法,首先进来的是他会调一个自己的私有的方法,这个私有的方法的目的是去一个已经存在的这个 method invoke,因为这一个接口的这个方法,也许以前被调过,所以他就不想去构建这个 invoke的过程,不要再重复做一遍。所以在这里头可以看到它有一个那个 method cache,不是我刚才看到构建构建这个map的 proxy的时候,是一个 method cache的,比如说 cache的就是这个 method invoker。

所以当他如果有调过的话,cache 存了 Invoker就不需要实例化了,如果没调过的话,就需要实例化一个Invoker。所以这个方法无论如何他都会返回一个这个叫做method invoke对象,对象里头其实有两个子类。一个是 default的 method invoker。另外一个是 plan invoker。一般来说都会使用这个 plan Method invoker,这个调开始返回的,他会调这个 invoker方法,同样的把 proxy传给他

method,然后参数另外传了一个Sesson,因为他要通过最后要调Sesson,所以传给他,我们知道这个session是构建这个map proxy的时候,就给它放进去的。

前面到构建MapperProxy的三个参数:接口、sesson、还有master page,调这个panda method invoker这个方法里头,它都会执行invoker里头的属性,放到map

的method,所以map的method就是在这个Method invoket里头的属性,这个属性的对象里头,它有一个方法叫做execute,参数是sesson args来执行这个过程。那他怎么执行的?

其实是在这个map method中间可以看到它有两个属性,另外一个是method signifiture, meth这个东西就是一个map method,其实对应的就是我们在X mail中

间定义的一个。标签,就是一个map method,那标签的不同其实体现在什么?

在上面那个command的不同,就是一共有四种command,分别是slight

command、insert command、delete command、update command。他操作的标签主要是有这四种,标签里头写的那个内容是存在那个command的,在标签的上面可以看到它有一个传参的一个ID,然后有个传参的定义,有一个返回值的定义,那个写在了下面 Signature的这个里面,所以一个标签里头的所有的内容就写在了这个 command and  method signature的内容里头。当说要运行这一个方法的时候。可以看到它只提供了一个 execute,写的就是去这个判断那个stu commander是什么内容,如果是 insert

Situation in SP 的方法,如果 Amanda是一个 update,它去掉 sesson的 delete方法,如果他是一个 delete,去掉 session的 delete的方法,就是写的这样的内容,所以说是一个 Switch case。

Switch case,SwitchSQL command是什么样的类型,去调什么样的方法,第二在调方法之前,根据那个 methods isignificant的定义去做一个这个适配,就是他传进去的参数该怎么处理,传回的值该怎么处理?就是调过去的时候,你传过去的这个参数 argus。怎样映射到那个方法上去,以及说他传过来的值怎么回到我们需要返回的这个对象的这个类型上,这是那个 method significant里头所做的内容。所以这一段代码,就是我们可以看到在这个 map method excute里头的SQL的代码,其实是很长的,所以这是一段非常不面向对象的代码他这么写的目的就是使得不管那个 command是什么样的内容,就是不管那个在插件中间他要执行的是insert和 update delete还是什么样的内容,通通对于我们的代码来说都是去执行execute,传这个参数过去,那至于说他是什么内容,看这个 map method 中间的command是什么内容,看他的这个 method signature 是什么内容,然后去执行对应的方法,看这个东西是什么内容,这一端的代码就平铺在这个 IP的这个代码。

这是非面向对象的做法,它的缺点是不好扩展,如果说出现了第五种命令的话,意味着这段代码是需要去做修改。那这段代码如果说要调用一个新的第五种命令,通常对应的一个  sesson的新的动作,那这个 sesson码也要去修改。所以说他不是一

个高内聚的设计,但它是一个低耦合的设计,它的低耦合的设计是什么?

就是当出现新的这个动作的时候,或者说我们不管做什么样动作的时候,你们可以看到这个类图,这个动态模型都是一样的,就是代码都是一样的,至少说到这为止的代码都是一样,她的变化被包含在这个 Mac method。这个是一个设计模式,这个叫做命令模式。命令模式的意思就是我们把不管什么样的动作,我们不管是哪一

种的这个动作,我们通通把它包装成为一个统一的命令。

把它做成一个无差别的 execute的这样的一个方式,那它的差异性包含在这个对象

的内部。

会使得说我们去执行这样的一个对象的时候,我们并不去区分是我们执行的是哪一种命令,这样的话就会使得出我们执行的命令,执行的命令这个部分跟具体的这个命令的内容是做成的低耦合的,但他不是一个高类聚的设计,但是它是个低耦合的设计,这是第四个设计模式命令的这样的一个设计模式。那在 Mabits中间,如果说你定义的是不同的命令,它就会定义的是不同的这个标签,他就会执行 sesson中间的不同的命令。

目录
打赏
0
0
0
0
55
分享
相关文章
风向标!准备跳槽的小伙伴可以看下《2023 Java offer 收割指南》
大厂的面试题一直都是风向标,动态必须关注! 想高效快速地拿到心仪 offer,一定要从面试官的角度出发,提前做好功课,了解市场的最新风向。
756 0
【Node.js】从基础到精通(二)—— Path 模块全解析
【Node.js】从基础到精通(二)—— Path 模块全解析
125 0
用Python提取长时间序列遥感文件中缺失文件所对应的日期
【2月更文挑战第1天】本文介绍批量下载大量多时相的遥感影像文件后,基于Python语言与每一景遥感影像文件的文件名,对这些已下载的影像文件加以缺失情况的核对,并自动统计、列出未下载影像所对应的时相的方法~
116 2
用Python提取长时间序列遥感文件中缺失文件所对应的日期
工作一年,我重新理解了《重构》
重构是一种在不改变代码本身执行效果的前提下,让代码变得更加整洁易懂的方式。代码不仅要让机器能够实现预期的处理逻辑,更要能够面向开发人员简洁易懂,便于后期维护升级。
421 25
别再写狗屎代码了,推荐这 5 款 IDEA 插件,让你的代码质量直接起飞!(2)
别再写狗屎代码了,推荐这 5 款 IDEA 插件,让你的代码质量直接起飞!
261 0
别再写狗屎代码了,推荐这 5 款 IDEA 插件,让你的代码质量直接起飞!(2)
HIMA Z7136 数模转换可能会降低信号质量
HIMA Z7136 数模转换可能会降低信号质量
HIMA Z7136 数模转换可能会降低信号质量
m阶B树的非根非叶结点至少要ceil(m/2)个孩子原因
m阶B树的非根非叶结点至少要ceil(m/2)个孩子原因
m阶B树的非根非叶结点至少要ceil(m/2)个孩子原因
Verilog语法入门(三)八输入与门
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
533 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问