00:00
那么合并之后啊,那原来的log in select和明显就没啥用了,那咱们其实啊,嗯,就可以把他们删了啊,就把他们删了啊,我们到这个web点叉L里面。哎,你就可以把这个东西给人家住掉。啊,给人家住掉。又没啥用了啊,就住了啊OK,嗯,这个代码呀,就暂时先给他保留了啊,或者说你删掉也行啊,删掉行都可以了哈,好,那么接着我们再来看咱们刚刚啊已经优化了。这个色类程序了,把它们俩合并到一起,但是大家想想啊,把它们俩合并到一起之后就完了吗?大家想想以后你看啊用户模块的功能。
01:03
哎,那么除了登录和注册还有其他比如哪些呢?添加用户说吧,修改用户信息呃,修改密码,绑定手机号,绑定邮箱等等等等太多了啊,就是注销呃这个什么呢?注销用户等啊很多诶。我们把这个改了等等,那么大家想想哈,你每一个功能它是不是都会有一个隐藏域来对应这个功能,然后在这边来做什么LE来进行判断,然后做不同的处理啊。
02:08
对吧,没错吧,哎,你这边每加个功能这里呢,就做一个判断啊,每加个功能这里做个判断,然后加个方法去调用。好了,那么这样子啊。每次都得改什么?Do post方法中的代码。是吧,要是有一种方法一次性写好,你不管调用什么功能,我这里都可以调用你相应的那个方法,那该多好,还真的有怎么做呀,大家注意看一下,其实它是有规律的,有什么规律呢?来,大家请看。嗯,我把这个就关了啊,这两个没有用的,先关了。好,大家看看我们这里面。大家请看一个规律,如果这个action的值啊,它等于log in,那么它调的那个功能方法是不是也是log in是吧?如果它等于register,那么它调用那个方法呢?也是register好了,那么如果是其他呢?对吧?那也是一样啊,那想想那这个action的值刚好是不是等于这个方法名,那么我只需要。
03:17
大家想想啊,我只需要通过反射。通过这个action的值找到这个什么呢?它对内的方法执行就可以了,那么以后呢,再有其他的功能,咱们都不需要判断,直接通过反射获取执行就行了。来,我给大家演示一下怎么处理啊。嗯,我在这里加一个测试的testest,哎,然后呢,这里我加个类,加什么东西呢,叫usual chest,哎,测试,那么咱们呢,这里面加几个方法,Public vote login,打句话这是login。
04:04
方法调用了,好,我复制一下,那么也有一个啊。这是啊的注册方法都用了,那么还有其他啊,咱们不是说了吗?有好多功能啊,有添加用户,有修改用户啊。来,再来。是吧,AEADD其实就是注册了是吧,那算了,咱们就update吧,啊update。用户,然后呢,还有啥呀,哎,还有这个update usual passwor,修改密码是吧,这都是非常常见的功能呢,那么我们把这个拿过来。嗯,然后呢,把这个也拿过来好,大家注意看,我们呢,下面写一个main方法,咱们就模拟一下这个业务的需要,有一个action的字符串嘛,哎,如果它等于log in,咱们需要干嘛?咱们需要找到这个action log in所对应的这个log in方法去调用,怎么处理,咱们请看诶,Usual test.plus。
05:31
点get declared method。就这个大家看一下哈,第一个是action。什么呢?方法名,第二个呢是参数类型,咱没有参数省略不写。啊,省略不写,然后呢,给它try catch一下。好,我接收一下这个返回值,Method。
06:01
好了,得到这个method以后啊,咱们打印一下这个method是个啥啊,先看看这个吧,大家注意看啊,如果这是log in,我就得到它这里这个log in方法就它。走。大家看一下是不是有啊,你看方法。没毛病就能得到,那如果你是注册呢,嗯,也可以啊。走你看也能得到,那如果你是修改用户的信息,他也能得到。有吧,如果你是修改密码是吧,它也行。大家看一下哈,是不是也可以啊,哎,也可以,那这个时候咱们不就跟咱们那个需求一样吗?咱们这边是啥需求,通过这个action的值找到它对应的方法啊,干嘛去调用啊,那咱们现在差的就是调用了,来怎么调用,咱看一下哈。
07:13
怎么调用呢?Me in VO。是吧?呃,这里需要两个参数,咱们去写一下,怎么做呢?New usual serve that testest,诶,这不是对象实例吗?后面是啥参数?你看the agreement,你看这提示啊,没有了是吧?算了,咱们确实没有参数,The agreement,哎呀,不写了啊,没有参数,算了好了。那么放在这里就行了,哎,这就干啥呢,调用对,记住啊,调用目标业务方法啊,这是干嘛,通过action啊业务,哎,鉴别字符串获取什么呢?相应的业务方法,反射对象就这样子啊,这就调用了,来咱们试试看啊,咱们试试看,我把上面列住了,这是update user password执行,它能调用那个方法吗?
08:22
这是不是都用了,诶你看符合咱们的预期啊,那如果是update us呢,走你。是不是也能调用啊,都可以的,哎,如果look in呢,找你。再来看一下是不是也能调用,如果是呢,它也可以。他也可以大家看见了吗?那如果是这么写的话,你想一想,我以后我还需要像我们这边想的一样,每加一个功能,我就做一次l if判断吗?根本就不用是吧?我这个代码一写好,你只需要干啥,你只需要写你的这个功能,业务方法就行了。
09:07
是吧,你就可以把你的注意力专注于业务之上。好,那接下来这种方案既然可行,那么我们就把这种方案优化到咱们的U策略当中。哎,就把它其实拿过来就行了,是吧,就这个代码嘛。OK,咱们给他拿过来,这个就不用了,咱们从此之后脱离这个l if,不断的判断啊,不断的判断,好这里面我把它粘贴过来。哎,明天过来这个呢,咱们有了不用了啊,Action是上面这个值,Action放到这里面来,但这个地方得换掉哈,这地方得换掉啊,写成什么东西呢?Be。Get class get declared method,哎,但大家注意哈,咱们的方法那可是有参数的是吧?你看咱们这个方法不都有参数吗?Request对象response对象上面呢,Request对象response对象,所以啊,我们在这里获取业务方法的时候加上参数。
10:19
A,加上参数注意看啊,咱们写啥呢?呃,叫做htp request.class http response.class。把这两个呢写过来啊,把这两个写过来点class OK,这个呢咱们了解一下。咱就写上来,哎,他呢就可以得到这个方法,然后再通过反射。进行调用。啊,再怎我讲中,但是大家注意看哈,这个地方调用也不同,那第一个对象实例是谁呀?是this,后面的参数呢?是IEQ和Louis易棒子,为啥呀,注意看,这是当前的对象实例,Request呢,是第一个参数啊,Le棒S呢,第二个参数。
11:17
哎,第二个三式来,咱们看看这么写它行不行,哎,它行不行,我们可以在这里打上一个断点啊,用第八个启动来调试看看效果。嗯。诶,好像不能启动是吧。找到book,咱们debug启动一下啊。好,那咱们测一下哈,我们来看一下换成这种反射的方式,它依然是否可用。啊,是不也没啥问题,来咱们以登录为示例啊,试一下登录就行了,我的命,我故意输入错误的密码,123456,咱们点击登录,大家看一下这个值是什么。
12:09
哎,这是漏印,看见吗?这是漏印啊,你也可以。从这里看对吧,这也有,那么咱们往下走一行走,走了以后这个method的值是多少呢?把鼠标移上来了,看了这个值了吗?或者你看这边也行。Project look in,你看见吗?连参数和抛的异常都跟人家是一模一样,你看这异常。泡的是啥异常S生IO生你看见吗?S生成IO生都一样的啊,都一样的好,呃,那紧跟着。咱们就要通过反射来调用这个方法了,你看其实这里也有说明,看见吗?Method是谁呀,就漏个in嘛,那我在这里打个断点,我看它调用的时候它会不会进来。
13:02
注意看啊,我打个断点,我看看进不进来来。走,大家看它是不是进入了宾这个方法了,哎,那剩下的操作我就不多讲了,咱们一步把它翻过去就行了。哎,这就是登录操作,这可能是登录失败嘛,因为啥呀,因为这个密码是123456,咱们in的这个密码是什么呀。In,你看一下in表是in啊,那这时候肯定是登录失败了,咱们给他放过去走,你大家看错误信息有回弦,哎,表单项也有灰线,那咱们再来一个正确的登录就可以了,走。我只是给他发过去了啊走。走。大家看这是不是登录成功啊,说明换成反射的方式优化这个代码之后啊,也是没啥问题的啊,这样呢,就省去了咱们以后干什么事情啊在这里面。写大量的if l if代码是吧,这个代码就可以省去了,咱们不需要再写了,只需要把这个注意力啊集中放在什么,哎,放在这个业务代码之上,写这类代码就行了。
14:10
啊,就这样子。
我来说两句