00:00
OK啊来接下来我们进入到这个第二层啊,就是我们的业务层或者这个服务层啊呃,那按照我们之前之前这个画图的这个顺序来讲的话呢,接下来就是你的控制层接收到请求以后呢,一般会调用这个业务层去做一个业务的处理。对吧,来,那我们来看一下啊。好,呃,那假如说呢,现在我们有一个请求来了啊,我们来写一个请求吧,好吧,有个请求来了,这个请求的话呢,是呃呃,我现我现在这里面去规划一下啊,比如说现在有一个请求,这个请求我们叫做叫什么叫这个登录请求可以吧,那你这个登录请求的话呢,你肯定得给我带参数了啊,比如说你要给我带上什么呀,你就带到这个,呃就就get得了,好吧,带到这里面,比如说你的参数叫什么呀,用户的名字。对吧,比如说叫这个张三,那你这个带个密码对吧,你要登录吗?是不是你要登录啊,带个密码,然后呢,呃,密码的话,比如说这个123啊456OK行吧,这是我将来要发送的一个请求啊,那我把它拿过来。
01:03
好,拿到这好呃,那么这个请求来了以后,注意啊,我们就要去进行处理,那我写个方法,Public对吧,String类型的啊,Public string,然后呢,这个叫什么,就叫logging行,呃,上面我们写一个什么,写get mein好,这里面的话我们写一上一个login OK,这里面写去的。Username写一个string的password好,然后呢,我们这个一般都会把这个注解写上哈,一般都会写上,这样的话我们可以什么确保万一啊,Username好,然后这个是什么呀,叫这个呃,Password。好吧,诶这样去写啊,行,然后呢,这里面大家注意哈,我们会把你的用户名和这个密码拿到,拿到以后你想想啊,你说你拿到用户用户名和密码以后,我就让你登录了吗。你正常的一个登录逻辑是什么样子呀,同学们,你输入你的用户名和密码,那我就得拿到这个值,拿到这个值以后呢,我是不是要去到你的数据库里面去做一个对比呀,对吧?看看你记录的那个,就是你在当时你在注册的时候,你写的那个用户名和密码,我不是给你记录下来了吗?对吧,那我要拿过来什么给他做一个对比,看看对不对,如果对的情况下,我才让你登录,如果不对,那我就不让你登录。
02:19
是不是,所以说啊,接下来我们就要什么呀,往后面去走了,你在这里面你就处理不了了,因为你是不负责跟你的数据库做交互的吧,好,所以接下来就是我们业务处理了啊,业务处理,那你的业务处理的话呢,你就要什么调用到你的什么业务层啊,所以说接下来看了啊,比如说我先给他入腾一个空吧,好吧,这个先不报错啊来,接下来我们就要加我们的业务层进来了啊同学们。回到这里面,我们用上一个package,我们就叫做service,好,那业务层的话呢,我们直接用上一个类吧,比如说我们就叫做customer这个service,好吧,这是我的业务层,好,那这个业务层怎么用的啊,给大家说一下,首先的话呢,它也是一样子的啊,我们需要先把它标识成一个业务层,就是一个service注解,这就是一个什么标识成,诶标识成这个业务层啊,业务组件。
03:12
业务层的组件。好吧,那你标识成一个业务层组件以后呢,接下来它里面可能就会有一个方法,比如说我们叫什么public,呃,我们叫这个。这个返不返回啊,我看看啊,返回一个吧,好,返回一个布尔吧,呃,这个这个就是字符串吧,好吧,返回一个字符串来叫什么呀?叫这个do login啊,就是我要去处理你的什么这个login请求,对吧?那我在处理的时候,你要听完了,同学们处理的时候,你说我要处理了,那我得知道你的用户名密码对不对,所以说我要求你把这个用户名和密码给我传过来。理解吧,你给我传过来。好吧,那你传过来以后,这里面就是我处理的过程啊,我处理过程的话,我大概啊,比如说我要什么有什么,有这个什么,呃,这个数据的校验啊,数据格式的校验,对吧?啊这个比如说有这个什么数据,呃,这个数据的什么,这个非控校验啊,就是你各种的什么这个业务处理啊,你这个都可以去写理解吧,好你都可以去写啊,都可以去写好,那你写完以后呢,你最终肯定会有一步啊,什么步呢?就是调用什么,调用我们的这个就是叫做数据层啊数据层然后呢,比对就是数据库的,数据库中的这个数据啊,是否这个一致对吧?诶这个的话呢,我们就什么先不比对了啊,先不比对了,这个是一会我们把这个数据层引入进来以后再来说的,反正你就知道这里面我经过了什么复杂的业务处理啊来,我们就说出一句话啊,就是这个复杂的业务处理好复杂的什么复杂的。
04:50
业务处理啊,这是谁处理的呢?是他处理的啊。OK吧,他做了这个复杂的业务处理,OK之后的话呢,我们处理成功了,比如说呢,你这个能不能登录成功了,那我给你返回一个值吧,比如说返回一个什么OK呀,对吧,或者什么返回一个什么这个呃。
05:09
比如说I啊,说我不让你登录对不对,OK或者什么error。是吧,啊都行啊,你返回一个值好,那你看当我有了这个业务层的处理以后呢,我的这个地方我是不是可以这么直接去调了呀。那如果说我现在想去调用你这个业务层的话呢,我就需要有一个对象,对吧,需要有他对象啊,所以说这个时候呢,我们可以什么去用上一个对象。叫customer service啊好把它扭出来,那么出来以后啊,注意了啊,把它放到这,放到这以后呢,我们就可以什么customer service点叫什么叫doging对吧,Do logging啊然后呢去调用,然后呢,把你的这个用户的名字,把这个什么password给它传过去。好,最后呢,他返回一个结果,那这个结果就是好,那么这个结果的话,你可以什么在这地方去处理啊,在这做一个处理。能明白了吧,做一个处理啊,比如说呢,你不处理也可以直接返回,比如说OK啊或者error啊都行,如果说你想什么告诉这个客户端的并不是OK或者是error,对吧,那你可以怎么根据你的这个OK啊或者是errorr呀,你处理成什么另外一个值,然后给他返回回去都行啊,这个我就这么简单去演示一下得了啊。
06:16
好,那你看一下这个,就把我们这个业务层就给它加进来。这很简单啊,就是它里面需要做一些事情。对吧,那这个事儿的话呢,你就什么直接从你的控制层,然后呢,通过一个对象去调过去就完事了,好吧,来我们先看这个过程能不能跑得通啊,再把它这个重新启动一下。好,启动一下啊。好,这个启动起来以后,我们就来做测试了啊,你看一下我就测一下啊走。这个是OK吧,同学们好,那如果说不出意外的话,我们的控制台应该会打印一个什么复杂的业务处理,这说明什么呀?说明啊,现在的话我做了个什么操作啊,我是不是已经能够正常的跟你的业务层进行对接了吧,这个代码是执行了的吧。
07:08
对吧,啊,这就把这个业务层给他什么引用进来。能看了吧?啊,看起来很简单啊,但其实大家注意。这种代码是有问题的,有什么问题呢?啊,这个地方没问题啊,这是你的业务处理啊,这个没问题,主要问题在这。主要的问题在这儿。这行代码。大家想想哈。呃,你说我们在这个控制层中啊,我将来会处理各种各样的请求,那基本上我的每一个请求我都得调用你的业务层,对不对。你的每个请求基本上都得有这个业务处理的吧,同学们。是不是,那你说我每次调用的时候呢,我就什么在我方法中,我去用上一个,每次调用我就去用上一个,你觉你觉得这个合适吗?同学们。这个合适吗?你写到这以后。这肯定是不合适的吧,对吧,所以说啊,你要去想办法啊,把这个代码呢,给它做一个优化啊,怎么优化呢,来想一想,我们在每个方法都去new啊,这个是非常不合适的。
08:08
好在每个什么,每个方法中,这个创建业务层对象啊,这个不合适啊,不好对吧,不好。那那你说行不行呢?肯定行啊,但是不好。能听到吧,因为将来我这个每一个方法啊,基本上我的每个方法中,我都希望用到你的这个业务层的对象,那你不能让我每次用的时候我都创建吧。对吧,好,那说到这以后,大家可能想到说那还不简单啊这样。我把它搁到什么,搁到我整个的内中。这种行了吧,对吧,我搁到整个类中以后,你看一下你的每个方法中是不是可以什么直接去调用这个,诶业务层对象的呀。对吧,这里面可能也能掉的哈,比如说什么customer service是不是也能调的呀。这肯定没毛病。是不是啊,这个大家应该都是能够想得到的啊,但是我跟你讲。
09:02
这个也不好啊,但是为什么这个不好呢?大家可能就想不明白了哈,我来给你慢慢解释啊,其实这里面的话涉及到很多东西的啊,这个也不好,就是直接啊在什么在类中啊,创建对象啊,这个不好,他不管的点在哪呢?就是写死了,这个啥玩意叫写死了呢?啊给大家分析一下这个东西,你现在就把它写死的,就是你用了个什么什么对象,你前面定义的是什么什么对象,这都是什么写死的代码。好,那么假如说啊,大家注意,现在我有个问题,有个什么问题啊,就是我有个需求,就是我要更换业务层的实现。就比如说啊,我原来这一套业务层的实现呢,我觉得不太好用,你能不能听明白。啊,我觉得不太好用,我现在想去更换了,想去更换一套了。好,那我肯定不会什么在这个基础上去改啊,我要去更换了,我要什么写一个全新的东西出来。能明白吧,假如说啊,我写了一个全新的东西,叫什么叫CU customer service,叫这个new对吧。
10:09
我写了一套什么全新的这个service出来了。那你想想啊,这个时候如果你要更换的话呢,相当于你要去写出这种代码来啊,你要写出这种代码来,比如说。嗯,把这个。复制一下吧,好吧,这这个这个没有啊,这个没有,然后呢,我要去这么去做啊,就给你说明白这个事情啊。好,然后叫什么叫这个。Customer service对吧?啊,这个名字叫啥就无所谓了啊,等于什么又上一个还是它。对吧,那你是不是还得写成这种代码呀,同学们就说白了啊,你更换以后,你要怎么做呢?你把它注释掉,你要把它注释掉,然后呢,把它写进来。对吧,这样的话呢,我的这个业务层的组件,我才能够什么做一个更换。是不是好,但是你看一下你这个做了这个过程啊,你换了这个业务层组件以后呢,其实你会发现啊,我需要什么对应的我的controller层也要去做一个修改。
11:02
当然你现在看那改就改呗,这这有啥难的呀,但我跟你讲哈。我们将来一个玩一个复杂的项目啊,我们可能在我们可能会有N多个controller,你能明白吧?就比如说这是你的什么cost controller,那么还有什么user controller,有什么什么order controller,就是我的每个模块不同的功能我都有可能会有controller,那我的每个controller中呢,都有可能会调到什么不同的service。假如说你的一个service组件,在这个很多control都都调用了,那你将来你要改它,你就得什么跑到它里面去改。每个里面都得改,每个礼拜都得改,你这个事情你就很烦了,你知道吧。你一个还好,如果你多了以后,你就相当的烦。听懂了吧?这个时候你就想想应该怎么办。这么做肯定是不行的,你不用想了,绝对不行。直接写死绝对是不行的。好吧,来,赶紧啊,转一转你们的大脑啊,想想以前有没有给你们讲过。
12:01
什么技术可以解决这个问题?啊,这个并不是一个什么高大上的技术啊,就看你能不能想到这个点上啊。就相当于我们尽可能的去把这个代码呢,给它做的更加的灵活一点啊,不要把它写死了。啊,有没有同学能够想得出来啊,就是你把这个想到的关键点说一下就行了啊。能下车了,你可以说一下啊,我看看。呃,有同学说到单利啊,嗯,单利单利的话。接口。诶,还有什么工厂好了,这还还是很聪明的吗?同学们啊,还是很聪明的啊,能想到关键点的啊,呃,这个雷翔说的这个丹利啊,丹利的话我不太明白你什么意思啊,你是拿这个单利去做这个对象的创建是吧。
13:04
啊,这个单例其实我们用到了同学们这里面,我们是用到单例的啊,只不过我没有去管这个事儿啊,其实这几个这几个我们都得用得上啊,都得用上。好吧,那我就来整体给大家去说吧,啊,其实里面关键的点在的关键点在这个接口上。关键点在接口。你能明白吧,好,你比如说啊,现在我把这个代码呢,我做一个更改啊,你看啊,现在我们要把这个关键点给它引入进来,比如说啊,这个就是我们的service对吧,这是我刚刚写的那个,嗯,我看看啊,这是我刚刚写的那个service啊呃,这样吧,我换一个名字好不好,我换个名字啊同学们,呃,我把它呢做成一个接口吧。好吧,我把它做成一个接口啊,那我这样哈,呃,我写在它下面的话,我就用上一个,嗯,用上一个package,我叫这个音啊好。看了啊,我把它的做成一个接口,然后呢,我在它下面的话,我用上一个类,嗯,用上一个类啊,这个叫做customer这个service的一个input类,呃,这是一个具体的13类,好吧,具体的13类,那我就什么你看啊,把我刚刚这个代码呀给它拿过来。
14:11
放到这里面,呃,这个上面我标上一个service好吧,就是我把这个代码整体做一个更换啊,你看了哈,这个的话呢,这里面我就不标这个service,就说白了啊,我是这样子的,我之前的话呢,用的是这个东西,我用的是customer service能理解吧。啊,用的是它了啊,好用的是它,然后呢,这个上面也是一样的啊,就是你写一个什么service。好,这地方也是一样的啊,OK吧,我简单做一个更改啊,简单做一个更改,好,那么这样的话你看了哈,就是我们刚刚分析到这个问题了,那我们需要把这个接口引入进来了,那我就把它称之为接口吧,因为这个名字呃叫声接口比较合适哈,来这是那个接口,我把接口引入进来了啊。啊,为什么要有接口呢?大家注意,因为有接口我们可以做到这样的一个操作,注意了啊,如果有接口的话呢,我就要这么去做了,首先我在我的接口中呢,我要去定义我的这个功能啊,比如这里面我写一个啊,这是我的业务层的接口。
15:11
啊,这是我业务层的接口啊,那我有了接口以后,我首先把这个方法给它声明出来,接口中我声明一个抽象的方法就可以,对吧,这是我的一个抽象方法啊好,这个都可以不要。然后了吧,那我接口中有了抽象方法以后呢,对于我的这个时长类来讲啊,那你肯定是要什么去实现我的接口的,叫什么叫这个customer service。这个能理解吧,同学们好,那你看啊,如果说我是这种设计的话呢,那我的代码就会变得更加的好一点,变成什么代码,我会变成这种代码,你看啊,我在写的时候呢,我就直接直接写个写个customer service对吧,后面我就什么直接去new上一个叫什么叫customer service对不对,首先啊,我们的代码肯定的先变成这个样子的。
16:04
就是这行代码跟这行代码的区别在哪呢?区别就是什么,我用上了你的接口了。对吧,我是什么面向接口去做开发的,因为前面的这个声明啊,定义什么的,我都是用的接口,对不对,而你是什么直接写死的。但是啊,其实这两行代码本质上是没有太大的区别的,因为你后面呢,还是写死的,这个还是治标不治本的。能理解吧,那我们就要把这个接口呢,用的更加的灵活一点,什么叫灵活一点呢?听好了啊,这个刚刚有同学说到什么工厂好,那我就可把工厂引入进来,你比如说啊,这个地方呢,我不写new的代码了,我写一个什么,我写一个工厂方法,比如说我们现在有一个自己的工厂啊叫什么叫my factory。U,对吧,这是我的一个工厂,这个工厂里面能够帮我去拗一个对象啊,比如说用上一个instance对吧,那你想想哈,我在我的代码中呢,我直接写成这种代码,就是你从这个角度来看的话呢,你根本就不知道这里面会给你返回什么对象对不对。
17:06
你能听明白,好,那么你看了哈,假如说我们现在在这个类中啊,我大概写这个代码啊,我不给你写具体的啊,比如说我们有一个class叫什么叫这个my factory。U2字,好,这是一个类,它里面的话有一个方法,这个方法就是什么呀,比public,比如说我给你返回一个对象啊object,然后呢,呃,叫这个new,好,我就写写写的明确一点吧,好吧,主要是表达这个意思啊好,那你看啊这里面。注意了啊,同学们,这里面我就会以这么随便给你用了,比如说我现在给你用上一个什么呀,比如说我return用上一个叫做customer service input,好你看了啊,如果说我是这么写的。呃,哎,算了,我直接写出来得了是吧,麻烦啊。嗯。
18:02
静态。A customer。哎哟,这个还内部类还不行,那那这样吧,干脆这样吧,拿到外面好吧,拿到外面,呃,我拿到这个最外面好吧,拿到这来写吧,这时候写好了一个工厂啊,你看一下啊,如果说我可以这么去设计代码的话,那你看一下在我整个这个类中啊,整个的这个类中,我是不需要去体现你到底是哪个类型的。对吧,我在这个方法中,我就会去控制我到底要给你返回一个什么类型,你比如说啊,我现在希望你是一个custom service input OK,那我就什么写上一个custom service I input,那么假如说将来说我想去更换我的这个十像类了,那我可以怎么做呢?非常简单,你要更换13类,那首先你肯定有一个新的十像类,对吧?那我把这个新的十像类给它写出来。我们叫什么?就叫做这个customer service simple,我叫new可以吧,好来这是一个新的13类啊,然后呢,它呢要干嘛呀,首先它要什么去employment啊,实现谁呢?实现我们的这个customer service,呃,Customer service对吧,这里面有个方法,我们去把它实现出来。
19:16
好,那这里面的话呢,我们就也是一样的啊,我就给它什么做简单的这个打印了啊,把这个拿过来好拿过来,然后这里面我就给成给成什么service I input new啊,那这里面我再改改啊,这是cover service iport可以吧,同学们好,那你看啊,这是我的新的一个十像类,好那如果说现在我想把它更换成这个新的13类了,那么大家看看啊,这里面的代码我需要做任何的改动吗?同学们。我不需要做任何的改动,能听懂吧,我是不是只需要在你的工厂中,然后呢,把这个东西给它改掉,又上一个什么叫做customer service搞定,对吧,我这个地方一改,那你看一下你这里面拿到的对象不就改了吗?这个是能理解的吧,同学们。
20:02
好吧。来这是我们刚刚有同学说的啊,来叫什么呀,叫这个什么接口加工厂好,那单利如果你想加的话也可以加上啊,就这里面你不要去拗了,对吧,你通过什么单利的方式来去设计,是不是也是可以的呀?好吧,啊就这几个啊,还是比较核心的,比较关键的啊行,如果说我讲到这以后,你是能够明白的情况下,好,那么你就能够感受到这个接口是有多么好。如果说前面你没有接口的情况下,你后面你再怎么写都不靠谱,因为什么呢?因为你给人家返回的是,如果说啊,我直接写的是他。对吧,那你的方法如果你没有接口的情况下,你这里面只能写个什么input对吧,那你这个地方返回这个类型,你的这个地方你就得定义成这个什么I input类型,你没有接口的情况下,但我有了接口以后的话呢,你所有的什么实现类,我都可以什么通过一个统一的类型来去接收,那我前面我就特别是灵活,我前面灵活以后,我后面只要是你这个类型的对象,我都可以接受。
21:00
对吧。啊,这个设计你一定要能够想的明白啊,想如果说这些你都够都能够想明白的话,那么接下来我给你说一下这个spring boot它怎么去做的这个事儿啊,同学们,其实我们根本就不需要这么麻烦,我们说一下这个门怎么做的啊,他也是要求你必须得有一个接口,你把这个接口设计出来,设计出来以后呢,你在这个声明的时候啊。它是根本就不需要你自己去拗什么东西的,你能明白吗?同学们,你直接把你要用的。这个业务层的主件,它的接口类型给我往这地方一声明,声明好了以后,接下来你要做的事情就是你去明确一下你到底是用哪一个,比如说假设啊,我们一开始没有这个新的,好吧,假设一开始没有新的,我只有一个旧的能理解。啊,只有一个旧的啊,那么这个时候你只需要把它标识成我们的业务层组件,标识成业务层的组件,那我之前说过啊,你看一下标识层业务层组件,以及我们之前说的什么标识为控制层,主要是给谁看的呢?主要是给你的墨去看的。
22:09
啊,其实啊,这个过程它做了一个什么事啊,注意你的这个注解,或者说你的这个注解它都有一个功能,什么功能呢?就是spo的容器啊,S会自动创建该类的对象好,该类的对象啊对象好并管理到。这个spring容器中啊,它自己有个容器啊,就是那个什么LC容器,对吧,就说白了啊,我只要这个重叠一加,那么这个对象的创建就交给这个spring去做了。而且啊,这个过程中啊,是单立的,它默认是单立啊。能能明白吧,呃,我记得应该默认是丹尼的啊,我看看啊,他应该是有一个,呃,就是刚刚有同学提到那个就是丹利的那个事儿了,对吧。
23:05
呃,就一个有,他应该有一个叫什么这个。就是有那个那个叫啥来着,我一下子想不起来了啊,我看看啊。下一下子想不起来了,点过来啊,它里面应该有一个叫做呃。呃,那个那呃那个那个叫啥来着,它是可以设置的啊,就是那个是否为单立啊,它是可以设置的啊,Y6这个不是啊,呃,一下给忘了啊,我记得它是单立的,好,这个我就先不浪费时间了,好吧,来这个我记得它单立的啊,就是它默认也是一个单立的好吧,行,那么并管理到这个S本容器中,那我们接着来说啊,那么他管理到这个容器中以后,接下来我们可以怎么做啊,听好了啊,那要明白啊,这个家伙的对象呢,已经在容器中了,好,来我们回到这个地方。你这个地方你迫切的需要一个customer service的一个什么对象,那这个对象怎么来呢?我是可以让这个从容器中把那个对象给我找到,然后给我注入到这个位置的。
24:05
那么怎么就注入了呢?你光写个它好使,你得加个注解,这个注解叫做out。什么意思呢?就是从spring容器中好找到对应类型的对象注入过来。明白吧?就直接给你注入过来了,就现在啊,你从这个代码层面,你是看不到任何的复制操作的,但是我告诉你,现在我是可以正常去使用它的,它是有对象的。你能理解吧,来我给大家做测试啊呃,现在的话看看啊,就他呃,我另外一个没加吧,这个这个我看看啊,好,这个没加注点的还行,来注意了啊。我们现在做测试。
25:01
好,呃,那我做这个测试,然后呢,接下来啊,注意啊,接下来我们这样啊,嗯。测试一下,我就直接发送请求了啊,走一下这个是OK的吧,同学们,OK的情况下,你看我后台打印的谁呀?后台我打印的是不是就是customer service I input,复杂的业务处理说明什么呀?说明现在我一定是能够调到你这个方法里面的,那我能够调到这个方法中,说明我的controller中呢,这个地方就一定能够调过去,这个能调过去说明我它一定是有对象的,但是呢,我们从代码层面你是看不出来这个对象在哪里的,这个是死不会在运行的过程中给你注入过来的。实际上它用的就是什么,用的就是它。理解吧,因为什么呀,因为我整个这个容器中啊,我符合这种类型的对象只有他这一个。对吧。好,那么这个时候啊,我们想了,那我现在如果说我想去更换新的实像类了,怎么办呢?非常简单,你把你的新的实像类写出来,脑袋瓜上标上一个service。呃,不要写它啊。
26:01
好,脑袋瓜上标上一个service,然后呢,把旧的service干掉,旧的service干掉搞定来这个时候我们再来重新取一下啊,因为改了代码了啊,你重新启一下。好,这种情况下我们再来进行一个测试,走,同样是OK吧,来,你看后台的打印是不是new啊。说明什么呀,说明现在我们就已经用到了你新的事项了。但你看看啊,对于我的这个代码的话来讲的话,我做过任何的更改吗。没有做过任何的更改。能听明白吗?同学们啊,这就是这个奔,它给我们带来的一种方式。好,那么正常情况下我们这么用就可以了啊,那么可能有同学还在这么想啊,那说那如果说你看啊,我这个上面也加了对吧,我这个上面我也加了service。啊,我就是玩对吧,我就想加。首先啊,你从这个真正的角度来讲,这两个都加是不合适的,因为你的13类啊,你肯定只有一个在用啊,但是呢,也不一定,因为有一种是这种可能啊,就是我们想去更换13类,但是呢,我现在并没有完全更换完,我更换了其中的一部分功能,这里面呢,还保留了一部分功能正在用,能听懂,这个时候可能就会导致这两个13类呢,我都想用,那怎么办呢?那这种情况下,如果说你看他也加了,他也加了这个时候。
27:23
这个地方就会报错了,报什么错呢啊,他说我现在呢,有两个家伙呢,都满足我。对吧,你让我去选择,那对不起,我不会选。能听明白吧,同学们,他选不了。好,所以说这种情况下,我们就不能让spoon自己去选择了,我们要明确的告诉他你使用谁,那这个怎么告诉他呢?使用一个叫做college fair这个注解来告诉他。这个注解后面你得写个名字啊,注解后面你得写个名字,这个名字写谁呢?就写他们两个,你想让谁注入过来你就写谁,那关键是它们两个叫什么名字呢?来听我说啊,他们两的名字说一下,我们加了注解以后,他们默认会给他们都起个名字,默认的名字就是什么呀,注意啊,默认的名字就是类名手。
28:20
字母小写形式说白了啊,他的名字叫这个小写,他的名字叫什么呀,他的名字就是什么叫,把这改成小写了,就叫这个名字了,OK,那如果说这个事你知道了以后呢,那你看啊,这个地方我就可以写了,比如说我现在希望谁来呢?我现在希望他来对吧,他来的话呢,可以来复制一下,拿过来改成小写。搞定。对吧,就是我明确啊,注意这个什么明确指定啊,啊明确指定将哪个对象注入过来。好来这种情况下我们再次去运行对吧,刚刚还在报错,现在不报错了吧,因为我告诉你了啊,你不用你选择了,我帮你做选择对不对。
29:09
好来走一下走成了吧,成了以后你看一下现在肯定还是他好,对吧,肯定还是他,因为我指定的是把它注入过来的嘛。明白了吧,好,那有同学,那能不能两两个都注入过来呀,对不起,不行啊,你怎么能注两个呢,是不是不行啊,好行吧,呃,那这个再再再来一句啊,就是这里面啊,默认的名字是首字母小写形式,那你说我能不能给它取个名字呢?可以取啊,你可以这么去取,这么去取啊,就是在它里面就写它里面是有个什么,有个这个value的啊value你就写名字就行了啊,写个名字。对吧,比如说我叫什么我叫我叫我叫什么我叫呃,我叫什么我叫我叫啥呀,我叫csi对吧,就是csi对吧,那就我叫csi对吧,如果你这么写的话呢,它的名字就不再是默认的了啊,就是什么自己的名字了啊来这我就不取了,一般我们也不会去取它啊,你就知道就行了,好吧,行,这就是我们引入这个业务层的一个主架。
30:07
引入它很简单,但是呢,我想给你说明白的是我们应该怎么去做啊,其实我直接上来以后告诉你来写个它,写个接口,写个时像类,加个注解就搞定,但大家不明白它是怎么去做的,所以说呢,我们是一步一步给他去什么。解释过来的啊,就是我们一步一步什么去研究啊,然后把它这个引入过来的。能听懂了吧?同学们,以后我们这么去写就完事了,好吧,就这样啊。
我来说两句