00:02
好来,接下来呢,我们来说下一个话题,呃,下个话题呢,我们来说一下这个自动装配啊这个概念,呃,那么首先啊,我们需要给大家来去区分一下什么叫做自动装配,什么叫做手动装配啊,其实到目前为止,我们所有在这个LC容器中做的配置都是一个手动装配,啥意思呢?就是我们都是以这种value或者说ref的这种方式呢,去明确的指定了一下,你要给对象的属性装配什么样的属性值,你想想是不是啊,都是通过这种方式来做的吧,对吧?但其实我们的破呢,它是支持我们进行自动进行装配的,就是我们可以指定一下装配的规则,然后呢,我们不需要进行明确的指令,它就能自动的将匹配的这个值呢,给你要装配进来,给你注入进来。但是有个前提,什么前提呢?只能进行,就是只能自动装配对象类型的属性,啥叫做对象类型的呀?
01:10
就是除了你字面值之外的,你比如说我写了一个person person里面有个name,有个age,你说能帮你自动装配这两个值吗?你知道你的名字,他知道你的名字叫什么吗?他知道你的年龄是什么吗?能行吗?不行的啊,所以说有个前提,一定要注意字面值的那种属性,它是装配不了的,只能装配对象类型的,就像这个person类型的,然后呢,Car类型的,什么地址类型的,这种类型的属性,我才能给你进行装配的。听明白这个意思了吗?能理解吗?OK啊,一定要理解啊,那么接下来我们就看一下,那么既然你能进行自动装配,那你到底是怎么进行装配的呢?我们需要了解一下它的这个装配模式啊,它呢?啊,这个地方我给大家讲上两种啊,就是我们虽然说写了三种,但是第三种大家就不用去看了,因为它用的比较少,我们主要讲上面的两种,第一种是根据类型来装配,第二种是根据名称来进行装配,所以说呢,啊,它是有两种模式,一种是by name的,一种是by time的,就是两种。好,那么一会讲的时候呢,我们可以让你来去演示一下啊,挨个都去演示好吧,那么接下来呢,我们就回到开发工具中来,具体给大家去说一下这个自动装配,那么首先呢,我们先把这个准备工作先来做一下啊,啊,我们再去写一个package。
02:35
好,At硅股point叫做auto well,那就是自动装配的意思,然后呢,这个里面的话,我们去扭上一个class啊,比如说我叫做卡,好里面都是很简单的啊,Private死去类型的brand啊,大类型的price啊,非常简单的一些东西来,我们加上get赛的方法好加上我们的抽死群方法,是不是写好了,写好以后的话呢,我们再去写一个class,我叫做地址啊呃,这一次地址呢,我写的是private string类型的promise,知道什么意思吗?省份吧,哎,这是一个省份啊,好,标注一下啊,有同学不认识是吧?好,这个呢,城市好,你们这个基本的单词都认识吧,认识啊。
03:34
每天读单词,你得好好读是吧?好,来把这个写好啊,这是一个地址,然后呢,刚才写了一个卡,然后呢,最后呢,我们再去用一个class,就是我们的person,然后对于这个人来讲的话呢,他有一个名字,然后呢有一个有一辆车是吧?然后呢,他还得有一个地址吧,能看到吗?来加上概率赛的方法,好,那么现在大家注意来看啊,我在这个pon里面呢,是不是就给它定义了两个对象类型的属性啊,对吧?像这个自变量是不是?哎,这个东西它是不能自动装配的啊,这个你必须得手动的去指定,而像这两个我们就可以进行自动装配了,听明白这个意思了吗?能理解了吗?OK,来都跟上啊,同学们好,下一步的话,我们就去用一个配置文件啊,我们就叫spring减auto,点查没。
04:35
然后这个里面,首先我们需要配置几个基本的病,先来配置一个car,然后呢,再来配置一个地址,好再来配置一个person,那么person我们来去演示我们的自动装配啊,自动装配OK来讲自动装配,像上面这个卡我们来配一下一个B,然后呢,ID我就叫做卡class呢,我们叫什么呀?哎看不要到车八啊,打的是凹L里面的,然后呢,呃,给他的这个属性,你看像这个什么brand,你你这个只能让死活帮你自动装配吗?
05:17
能不能肯定是不行的嘛,他们给你招配个什么这个这个嗯,再谁再写个啥奔驰是吧?啊,他能他能给你装配这个东西吗?不行的吗?能理解了吧,OK,来价格price啊,这个他也不可能给你自动装配的啊好比如说这个50万啊,OK,把这个写好来下一个的话,我们把地址呢也来写一下,地址也是同样的道理,它不可能帮你进行自动招聘啊,ID我们就叫做address啊,Class的啊,主标里面的,然后呢,有一个是我们的province省份啊Y6,比如说就叫什么呀,山西省是吧啊啊再写一个property啊,叫做city啊,比如说太原市是吧,啊也知道了哈,有。
06:17
下啊看OK,来写好了啊,那把这个加好以后大家注意哈,像这些值呢,我们是不可能进行自动装配的,听明白了吧,所以说自动装配的前提是什么呢?你必须是一个引用类型的,或者是我们所谓的那个对象类型的才行理解吧,好来吧,那么接下来我们就来配这个person了哈,呃,Person的话呢,我诶也是一个病了啊,ID我们叫做就叫做person吧,Class呢,来提示一下person好,这里面大家注意,首先它里面有一个属性叫做什么呀?哎,内容这也是不能进行自动装配的,听懂了吧?哎,也是不能进行自动装配的啊好,我们就随便写一个,比如说还是我们这个Tom吧,哎,这个写好了,那么写好它以后呢,大家注意了啊,剩下的像那个。
07:18
Cut和address这两个我们是可以进行自动装配的,以前的话我们怎么写啊,以前的话我们是不是也是通过这个什么,比如说给他的这个卡,然后通过ref去引用上这个卡吧,对吧,这些都就是什么,这都是手动的,就是你手动的去指定你要用哪个,而现在我不想用它了,好我要怎么做呢?注意自动装配,怎么进行自动装配呢?在我们B的配置里面使用一个auto well来去给它指定上它的这个装配模式,那么这个装配模式呢,我们讲两种,第一种我叫做by name,第二种我叫做BY,明白吧,好,首先第一种就是by name能明白吗?OK,好,那么其实我把by name往这一写啊,就是我把这个东西往这一写,他现在已经帮我进行自动装配了,明白了吧,我们在来测试,看到结果我再来给大家去解释这个原理是什么啊。
08:18
好,那我们在这个下面呢,再去用一个解你的测试类,我们来测试一下啊,就是TS我们的auto well啊自动装配,好这我们的这个啊凹to well啊自动装配,然后呢,我们首先呢,先写上一个实例化容器对象啊,有一个class pass xma啊来吧,Spring加auto。叫啥来着,小写的是吧?啊好,就表检查表,OK,那把这个容器实例化好以后,接下来我们就来获取谁啊,你就直接获取你的person就行了啊,其他两个就不需要获取了啊person.class好,最后呢,我们把它接收回来,来把Co输出一下person对象来运行,看结果有值没。
09:19
有值吧,OK,那这个值怎么来的呀?啊,首先你看哈,嗯,那肯定是自动装配嘛,是吧?啊,首先大家看我有没有手动的指定过呀,没有好,那么我指定的一个自动装配叫做by name,好,现在我们要解释的就是by name到底是怎么装配的呢?大家注意啊,By name by name那肯定要通过名字了吧,通过什么名字啊,注意啊,By name是怎么装配的呢?是通过比如说P森里面呢,我这两个是可以进行自动装配的,对不对,那么他就会拿上这两个名字啊,其实说的严谨一点是拿上谁呀,拿上size方法后面的这个值就是什么呀,看小写的,这小写的说白了不就是这两个值吗?对吧?拿上可以装配的这个属性的名字干嘛呀,到IOC容器中去找一个跟属性名一样的病是不?
10:26
啊。能看懂吗?就是我会拿上我P森里面的那个卡那个属性,拿上我P森里面那个战那个属性,到我的LC容器中的去找什么呀,去找一个病,看到这个病的ID值跟我的属性名一样不一样,如果一样我就给你进行招配,这就是一个摆name的方式啊,那你看,假如说我把这个改了,改成CAR1了,那么现在跟它对应吗?不对应,那么现在我们再来做测试,大家看啊,它就装配不上去了,你看到没有,这个是不是没纸了,看明白了吧?OK,所以说呢,这种装配的话是看什么呀?看名字是吧?哎,看你长得是什么样子的啊,看你好看不好看是吧?哎,是看外表的啊,所以说来注意听我说了啊,怎么装配的呢?就是嗯,使用。
11:25
啊,使用bin的属性名与什么呀?与LC容器中B啊,B的什么呀,B的ID值进行匹配,那么匹配成功则装配,啊匹配好,匹配成功,哎,就是什么呀,装配成功了啊就是这个意思,能听懂了吧?哎,只要你匹配成功了,那我就能给你什么装配成功了,好,那假如说我不一样了,以后呢,你看这个名字跟我里面那个卡是不是不一样了,他就装配不了了。
12:02
听明白这个意思了吧,OK,好,那么接下来你看现在我by name是不行了,那我假如说我把它改成by tap呢,这又是啥意思啊,诶,它就要根据什么,根据类型进行装配了啊,那么现在你看我这个还叫做卡一啊,然后呢,我现在再去只是只是改了这个位置啊,我们再来运行一下,大家来看结果。装配上了吗?装配上了吗?装配上了吧?OK,那你来看,首先你能排除的就是他现在绝对跟这个是没有关系了,对不对,那要跟什么有关系了呢?哎,跟你的class有关系了,By check呢?那我就根据类型去装配吗?是不是啊,哎,能明白吗?啊,就是什么意思啊,By level我要求什么呀?我要求你必须长得好看是吧?那BYCH呢?啊,无所谓了,是女的就行对不对啊,就这个意思啊,我是看你的类型了,我就不再看你长得好看不好看了啊说这个大家记住了啊by check就是什么意思啊,就是使用B的属性的什么呀,类型与IOC容器中B的什么呀?哎,B的class进行匹配,好,注意有个前提,如果是we。
13:31
一匹配则装配成功,那假如说匹配到多个呢,告诉我诶应该都能猜到了吧啊如果匹配到多个,什么兼容类型的病啊,则抛出异常来吧,我们来可以试一试啊,现在是正常情况吧,那比如说你看了哈,我把这个看呢,我再搞出一个来。
14:02
好,我又写了一个,比如说叫cart to啊,然后呢,这个呢,稍微改一改啊改成什么呀,改成宝马是吧?啊你看一下是不是改了,这两个病我都配到这了吧,那么这个时候大家注意,我再来测试呢,它就不行了,报错了吧,报什么错呢啊,你看一下。我期望单个匹配,但是找到了两个,是不是还是我们原来那个错看明白了吗?所以说我就说过这个错你们以后会经常遇到,但是你遇到的话,你就一定要想到是因为匹配到了什么多个了,你想吗?我拿上你这里面的,比如说P里面的这个class这个类型,那么当我的配置门件里面一找,它也满足,他也满足,这两个病都匹配上了,那么他就不知道要装配谁了,明白这个意思吧,哎,所以说呢,这就是要给大家去讲到自动装配到by name和BY柴学会了吧。Okay。
我来说两句