00:00
接下来呢,我们看一个工具类的使用,叫做bans。哎,变us,那么变us工具类,它可以一次性的。哎,把所有什么呢?请求的参数注入到Java并中,大家注意啊,这不仅仅是它唯一的一个作用,这只是它一个作用而已,比你有,那么为什么有这样一个需求,大家注意看一下哈。不管你是登录也好,你看你这个登录,你是不是要把这些请求参数封装成为一个娱乐对象,没错吧,这是登录,那么你注册呢?你注册同样要获取这些请求参数,诶也得干嘛,也得封装成为一个user对象。啊,这咱们了解一下啊,就不管你是请求。还是这个登录还是注册啊,都需要干这个事情,那么大家想想,咱们现在这里啊,这个参数是少,也就写个四五行,那么到了这个实际的项目当中,大家注意看这个注册花,哎,你看参数就多一些,要获取的更多,那么可能到了实际的业务当中,这个实际的参数啊,可能还有二三十个的也有可能。
01:23
是,我不知道大家有没有印象,你到银行去开个单子的时候,人家给你填那个单子,上面是不是好多内容。对吧,那个是一样的,哎,那个是一样的,那如果说二三十个三次怎么办?那你这里光这一行代码就要调用二三十次,然后你呢,还要在这个地方,呃,有一个usual对象是吧,New usual,然后呢,还要调用这个usual,点某某某方法调用20几次。那这就很麻烦了,如果说有一行代码就可以什么呢?省去获取所有的参数,然后也省去这个set方法,那整个代码就变得很简洁了,很简单很好用了,那这个功能谁提供了呢?就是这个ban us啊,那这个bin us大家注意啊,它不是GDK的变U,它不是GDK的这个什么呢类,而是第三方的那个工具类啊,所以需要导包,哎,导包。
02:30
那打哪些包呢?大家注意看啊,咱们打开咱们今天这个内容,它里面就有这个ban us。你要用这个包的时候,大家注意还要把这个common log导进来。啊,因为它依赖这个包啊,所以倒包的时候倒一次倒两个来。咱们把它放到咱们这个书城里面来。啊,放到这个lib目录下,然后大家看啊,这两个包添加进来之后啊,它现在还没有这个呃角标号,有这个角标号呢,说明它还没有在哪路径中,咱们得去添加一下,找到这个项目结构啊,去调整一下,找到这个库,诶给它添加一下。
03:14
好。Being u进来了哈,就进来了,好,咱们点击open,你看这就听加进来了,哎听加进来之后呢,有没有效在这里敲一下就知道了,就being u看有效了是吧,已经导进来了,好,首先这个类啊,要用的时候呢,先导包啊,先导包哪两个包把它复制过来哈,就它变U和looking。两个包,记住啊,两个经常有同学就是倒包的时候只倒了一个B优跳时,结果觉得就报错,记住啊,倒两个倒两个第二,哎,这个什么呢?就是使用DU类啊方法实现注入对吧?那我给你演示一下大概怎么用哈,大家注意看,咱们就拿这个注册呢举例啊,我现在有一个usual类,等于new这个us热类,一开始的时候大家看一下哈,就是注入之前。
04:30
又到里面是空的,然后哎,还有个注入之后是吧,中间怎么去注入啊,大家可以看叫做B。点,你把这个U的对象放进来。啊,然后这边需要个什么东西啊,你看他需要个map。呃,为啥是map呢?大家注意请求的参数其实就是什么?请求的参数就是name等于Y6,连字符name等于Y6刚好呢,就是静止对,那这个时候参数的静止对怎么获取啊?request.get parater map大家看见了吗?
05:12
刚好是一个map对象,人家给你封装好了,哎,那么这个操作呢,它可能会抛异常,所以咱们选中它们CTRL加out加T是吧,给大家TRYK一下都包起来。好,那么包起来之后,大家注意,就这么一行代码,把所有请求的参数都注入到什么呢?U的对象中,U的对象中,那么我们在这里啊,打上一个断点来试一下啊,打上一个断点来试一下,咱们看看这个效果,看看能不能出入啊。啊,我在注册这边敲一下ZWG168123456123456。
06:03
然后ZWT168LQ点com啊这里abcde,所以说咱们提交大家请看一下哈,读point里面背出来,咱不看这个啊,现在不看它。咱们给它发过去,好,他已经进入user了,并且停到了注册这个代码当中,我把其他的关了啊。好,大家看一下哈,现在咱们往下走一行走,你看注入之前这里其实你也能看见都是空的,你看见吗?后面行收是空了,或者是你看下面也行是吧?看下面也行,然后再往下走一行,他就打印这里就已经打印了啊打印看哪呀,你切到serve这边,你看都是空。哎,都是空好了,那么接着我们再来看一下,接着这行代码就干码呢,就注入了,把参数一次性注入进来了,诶注入然后呢,再打印,这时候大家再看一下。
07:01
看见了吗?这是不是一次性的把这些参数都注入到Java,并中了一次把值都注进来了,那这个工具呢,这个方法就特别的好用,那这样子呢,我们就可以省去这边大量的get方法,从usual里面直接取值就都有了,都有这些参数的信息了,哎,这咱们了解一下,这就是bam us工具类的使用就非常的简单。但是大家注意。每个。每个服务器的业务啊,基本上都要把这个参数封装成为Java并的,那我们每个都要这么写这么一段吗?其实大可不必,我们可以干嘛,我们可以把这个内容啊,写成是一个工具类去使用就可以了,哎,去调用一下就行了,只需要一行啊来,那怎么做呀,在us里面咱们写一个类,哎,叫做web u。是吧,写出这个类,然后那这们写的方法怎么写啊,Public static VO copyra to是吧,写这个to吧,To并好,那么这里呢,就是htp request对象,哎,那么还有加B。
08:26
是吧,Java病,那这里的代码呢,刚好就是它这一段。稍等啊,我复制一下,然后我稍微调整一下这个U的对象呢,不再是咱们创建了啊,而是这个B,那这里就是。并。In。B啊,好,咱们就这么写,咱们再来看看把它写成工具类之后能不能用了。大家注意看一下啊,我先把这个去掉。好,然后啊,咱们再调用这个方法叫做web us.copyy就复制嘛,是吧,复制参数到这个Java b当中,那么把IEQ放进来,哎,把user放进来,U放进来,哎,咱们这个重新部署一下。
09:22
好,那那代码生效啊,咱们再测一次。诶,这个部署成功了没有啊,没反应呢,再来。要等这么久吗?那就那就那就重启吧啊。就重启了啊。好,稍等一下。好,呃,这个时候呢,重启了没问题了啊,然后咱们注意看一下咱们的这边跑到注册里面,ZWG168123456123456ZWG168艾特Q点com ABC dt,大家注意现在我们要重点关注的是什么?关注的就是它请求过去之后调用这个工具类的代码,它能不能一次性的把所有的参数都注入到U的当中,咱们看的是这个哈,别把你的注意力解散了,来走,提交他过来了。
10:35
然后往下走,一开始U的都是空对吧,你看这里眼睛知道啊,然后往下走一行。大家看一下这个时候这个代码执行完了以后,你看这个U就有值了,看见吗?或者你看这个后台的打印是吧,也有值了,也有值了,OK,这咱们了解一下哈,那这个工具类呢就可用了,那咱们以后获取参数的时候,直接调用这行代码就简洁了很多。
11:03
哎,那么问题又来了,这个功能啊,基本上看上去一乍一看诶都完成了,那么我们后面就来纠结一下一些细节上的问题了,那有同学不进就要问了,诶老师他为什么这个参数就能注入进来呢?到底是咋回事儿啊?有什么?有什么这个细节啊,源码原理之类的,给我们讲讲哈,咱们注意看。我先把这个停了,大家注意这里面请求的参数是什么内容,这个参数我不知道大家有没有留意哈,呃,我再这吧。我把这个map获取出来,打印一下,叫做IEQ,点get per map,我先得到这个map,然后大家注意看看parater map.four是吧?可以吗?啊,不行是吧?那就自己来吧,做循环。
12:07
哎,然后这个map.entry啊,这个entry就是什么呢?就是它。Entry,然后是什么排meter map.entry咱们遍利一下,大家看一下这每个建制队到底是啥啊,每一个进制到底是啥?大家注意看打印啊,打印这个地方就是什么东西呢?哎,entry.get p这是参数名,加上参数值是什么呢?等于A点。List,哎,然后是entry.get value,就这样子,我们看看每一组建的对和这个加va病到底有什么关系。
13:04
啊,到底有什么关系,好,咱们重启一下。来我们看看这些细节,123456啊123456A1ABCDE好,来说明已经启动成功了啊,这已经启动成功了,大家请注意看我点击注册走你啊看一下细节,咱们往下走一行,走得到这个map了,咱们打印。每一个map啊打印,我等他打印完。我在这里打个断点吧,啊,我给他放过去,让它停在这里,然后咱们看看这个控制台,大家发现了吗?这个不是请求过来的参数action吗?隐藏域嘛,对吧,这用户名,这这个密码,这个确认密码,邮箱验证码,大家看见了吗?这些刚好注意,我们看再走一行,刚好跟什么,跟这个usual对象里面这个属性名是不是对上了,你看见了吗。
14:07
这个参数名跟这个属性名是不是对上了。对吧?哎,所以它注入啊,就是通过这个属性名和参数名对应的一个关系注入的,那么仅仅只是因为他们对应吗?我们给大家看一下细节哈,那如果说我把usual对象大家看这里有us name,我在这个set user name这个地方加一个一。它还能够成功地注入吗?嗯,还能够成功的注入吗?好,我们。重启,再来看一下效果哈,看看有什么变化。来123456123456A。关了。Abcde,好,点击提交,这时候咱们再来看看能不能注入啊,走走走走走走。
15:05
跳过去,呃,咱们看控制台打印客户端的参数没问题啊,接着看这里就知道问题了,走。看打印。发现了吗?发现问题了吗?我们改了它usual name对应的写方法set方法之后,它这个值就再也注入不进来了,虽然它的这个参数名username和它的属性username还是对应的,但是已经注入不进来了,这说明什么?说明注入的核心是这个。的写方法记住了啊,其实大概的原理什么样子呢?它就是找你看啊,这是参数嘛,是吧,他把这个参数取道,然后呢,他就找这个action,呃,然后把这个action改成set action,然后把这个参数值reist就放到这里面来传进来,哎,如果有这个方法,它就叫用户值,如果没有它就跳过,接着找什么userr name,然后userr name的它就改成什么东西啊呃,Set user nameme这样子,诶,然后这里放的是什么,就是ZWG168把值附进来。
16:17
这就是为什么我们改了这个set方法之后,S辅助不进来了。所以大家注意。它腐蚀的时候其实走的是S方法。哎,我们那时讲E的时候,取值走的是读方法,也就是get的方法,大家要明白一下哈,这是底层的一些原理,好,那这个呢,就是它注入的一些底层原理的细节。啊,那么除了这个,除了这个咱们要说明之外啊,咱们还要说一个点,就是咱们这个方法已经写上来了,但是这么写好吗。这么写不太好,大家注意看啊,这么写其实不太好,为什么不太好?大家仔细看一下,这里面的核心是这一行代码吧,这一行代码它所做的工作其实是什么?其实是把一个map的值注入到Java并当中。
17:13
对吧,哎,刚好呢,你这个请求参数啊,也是禁止对的形式。大家要记住哦,那么大家请问一件事情,如果说我这个地方参数写成了map。我写成了map哦,然后我把这个地方换成W,大家想想这个值的注入。它其实还是可以用的,那么只需要对这边注入的时候改一点小的问题,就get map就行了,你看我在这里传map,这边接受map,这个功能上来说是没有任何的影响的。那我打个断点哈。
18:00
来啊,那这个时候咱们注意看啊,这个我先把它放过去。啊,先把它放过去,来,咱们再来测试一下,123456 123456啊abcde,咱们来看看,现在我改了以后啊,我把这个东西改成map之后,它依然是不是可以用啊,咱们来看这个走走走走走走,呃,上面这段咱们就不看了啊,就放过去了,走。打印参数对吧,呃,咱们再来走。注入注入,大家看注入之前,注入之后是不是依然注入啊,这个没有注入成功是因为什么?呃,咱们刚刚改完之后啊,没有重启它这个代码还没有生效,一会儿重启一下就行了,这个依然是可以注入,大家看见吧,依然是可以注入,或者说我再重启给你演示一下吧,对吧,要不然看不到你的心里没有底。怎么又问他了?来吧,停了吧。停了,给你重启一下算了啊。
19:04
稍等啊,咱们看看这地方。好,来这个部署成功了啊,咱们再来一次,123456 123456啊这个地方abcde点击提交,那么大家请看一下哈,走往下走,再往下走走走。走,大家注意看,这个参数已然改成了map了,看见了吗?这参数已经是map了啊,这个参数已经是map了,你看这个value上面不就是map了吗?是吧,哎,然后呢,它这个地方的打印注意看啊,再往下走啊走。是不是已经注入成功有值了,说明改成map并不影响它的使用。那我们就要问了,老师,那为什么要改成map呀?我放那个http select,我用这个做参数又有啥问题,我用这个做参数又有啥问题吗?有大家注意,如果你的参数是写成这个类型,和写成map完全不同。
20:09
有什么不同呢?大家想想,我把map里的值注意啊,我把map的值注入到Java并,这个需求是很常见的。那么我们的Java代码啊,其实是分成三层的,大家回忆一下,分成三层,有DAO层是吧?注意看了啊,有DA层,Service层,有web层,大家注意,那如果我写成什么东西,Http serve request,我如果写成它,那么试问一下DAO层和service层有这个API吗?它能用吗?他们俩不能用。但是如果我写成map map就不同了,Map呢,在do里能用,在service里能用,在web层依然可以用。
21:09
这就是写成map的好处,如果写成的类型是ATP select request,那么这就带来了web乘API的耦合,耦合度就高,大家注意一下哈,这是我们在写API时候设计的一些小的注意的细节,那么我们写成map时候,这个代代码就更加优雅了是吧?哎,这咱们知道一下啊好,那咱们这里就写成map啊,它的作用是什么呢?把map中的值注入到对应的哎,Java并属性中,这样写呢,代码的这个适用范围更好一些,耦合度更低,扩展性更强,使用更加灵活,哎,这就是你看这些小的细节,好,那么还有一点就是什么东西呢?咱们还可以再对这个方法呀进行。
22:01
优化一下怎么优化,大家看现在我把这个删了啊,这个测试代码删了啊,现在这个代码呢,它是分两行的,你看这里创建一个,这里再调用一次,我能不能把这个代码优化成为一行。可以的。怎么做呀,大家继续看着哈。我把这一部分剪切出来,放到这里。大家想想,我把参数注册完之后,我再把这个user传给他不就好了吗?那这时候怎么办呢?我就可以把这个返回值变成object。然后在我的这个下面return b就可以了。哎,这个时候我的代码就变成了一行,当然我需要类型转换,类型转换一下就行了。诶运小化就行了,那么我们debug来测试一下,你看这样写代码就更更简洁了,是吧,就越来越简洁。好,咱们等它重启再测试一下啊。
23:06
好,启动好了,呃,来咱们在这里再测啊,123456 123456,哎,好,咱们提交走。这个时候大家去看点击啊,这我不看了,我不看了啊,再往上挑一行代码,大家看这个值就已经注入成功了,这样写起来就更加简洁,你看见了吗?把鼠标移上来。你是能看见这个U的值的,看见吧,哎,好了,那么这样写就好了吗?还不是最完美的,那咱们还可以干嘛?这里是不是还需要类型转换呢?咱们还可以把这个类型转换都省去。那怎么做?你想想,你这里传的是U的对象,后面返回的就是U的,你如果传的是其他类型,它就会返回其他类型,那怎么办呢?使用泛型。哎,使用泛型,那泛型咋用呢?大家请看你在这里加个T,在这里呢,把这个返回值变成T,这个对象呢,变成T就完事了。
24:03
啊,开玩笑的啊,我把它放到这边来,好,大家注意看一下哈,那这样写呢,就连类型转换都不需要是吧,比原来更加优雅,更加清洁,更加好用,来吧,我们再重启一下啊。我们看看呃,写成泛型之后影不影响它的使用啊,咱们把这功能测完。好,等它重启。好了,启动了啊,咱们再来123456,呃,123456,哎abcde啊好提交,那么这时候啊,咱们再往下走一行,大家请看一下,把鼠标移上来。一行代码是不是已经注入成功了,对吧,已经注入成功了,好,而且还省去了这个放行,那么这么写呢,就是呃,最优雅的代码了,好,这就是b us工具类的一个使用哈。
我来说两句