00:00
好,那下面呢,我们来看一下这个自动装配的第二种方式叫做by name,这个by name大家注意,为什么叫by name啊,是什么意思?它会把我们当前咱们要复制的这个属性的属性名来作为bin的ID,在IOC容器中去匹配到某一个B。来为当前的属性扶持。就比如说咱们把咱们的配置文件打开,比如说我们当前要复制的属性的属性名是不是叫user service呀。那它就可以把当前的属性的属性名来作为B的ID,来找到某一个B来为当前的属性赋值,哎,这个答案一定要看好。好,那所以说呢,那我们现在呢,咱们是不是就可以把它给改一下,所以说这个by name一般都什么时候用,大家注意一般呢,说实话它都用不到,因为我们之前咱们就说过,那一个类型所对应的B,你不需要在IOC容器中去配置多次,对不对?所以说咱们其实根据by tapb就可以,那如果by tapb真的是不行,就比如说咱们现在这种情况,你在IOC容器中光类型是不是就有多个,那这个时候我们就可以通过by name来实现,然后通过by name来实现的时候,大家来看,只要有一个B的ID和咱们要复制的属性的属性名一致,那我们当前就可以把这个bin就可以来指定我们当前的这个病来为当前的属性赋值,OK吧。
01:23
好,大家看啊看,我在这把它给改成是by by name by name,好,大家看一看,这还报错不报了,不报错了对不对,然后我们这个地方也是把它改成by name by name,大家再来看看,报错我报了就不报了啊,为什么?因为当你通过by name的时候,咱们肯定是能够匹配。能够匹配到某一个具体的病来为当前的属性扶持的,OK吧?好,那我们现在咱们来一个执行,大家看看好使吧,是不是,所以说by name一般都什么时候来用by type不行的候我们才我们再用这个by name,但是前提啊,你如果说你by name如果匹配上了,最起码前提是这个B它的类型也能够匹配得上,也就是说这个B它肯定是能够为我们当前咱们的这一个属性来进行赋值的,OK吧,好啊,行,这就像是我们马上要讲的基于注解的自动装配一样,对吧,基于注解的自动装配就是by tap和by name,它默认根据by tap,如果by tap不行,然后它就会根据咱们的by name来实现这样的啊好,那我们在咱们的配置,咱们在咱们的这个类里面,把这个给写一下。
02:36
把这个笔记给写一下,首先这是咱们的第一种方式啊,然后下面呢,这个by tap是咱们的第二种方式,咱们现在的第三种方式呢,第三种方式啊,然后是我们当前咱们的by name,那什么是by name呢?大家注意,然后将要赋值的属性的属名对吧?然后来作为bin的ID,然后在IOC容器中,然后来匹配某个并啊,然后为属性赋值,为属性赋值啊,行,所以说你要知道为什么它叫by name,它是拿着谁呀,跟把咱们属要赋值的属性的属性名作为B的ID去匹配到某一个病来为属性赋值的,OK吧,好啊,行,那当然呢,它也有一些特殊情况,比如说那咱们的特殊情况跟咱们的by tap相对应呗,如果你一个你都找不到,比如说咱们by tap不行,我by name也不行,就。
03:36
比如说这咱们不叫user service了,我们叫什么叫user service I PL,然后这个呢,咱们叫做user do p,那大家看一下,你看你by name行吗?你by name里面,这里面有任何一个病的ID跟他一样吗?没有,你这里面有任何一个病的ID跟他一样吗?没有,所以说这个时候他也是能装配就装配,装配不了就拉倒,就使用默认值,大家看啊,我们现在一个执行,你看在这还是啥,还是空指针,OK吧,好,这是咱们的这种情况,那你说有没有一种情况,就是说它by name一下匹配到了两个,你就比如说这个咱们叫user service,这个咱们也叫user service。
04:17
大家说这行不行?啊,大家想一下啊,你看这种情况他行不行。什么叫did是唯一标识呀?唯一标识能重复吗?重复不了啊,所以说我们现在在这来写了两个service之后,它就不是你能够自动装配,是不是能够自动装配成功的问题了,而是我们当前咱们的IOC容器你都获取不了。知道吧,他根本就通咱们当前的IO配置文件里面的配置,它都是错误的,知道吧,现在我们来一个执行,大家看啊,你看他报的错,他说我们当前的配置问题对不对,然后我们当前这个叫做user service的这个bin,它已经被使用了,在我们的bans的一个标签里面能看懂吧,所以说大家一定要看好,如果你当前的两个bin的ID是一样的啊,然后这个时候不是你自动装配成功与否的问题,而是我们当前的IC容器你根本就获取不到,它在解析配置文件的时候就会报错,OK吧,行啊,这个大家注意,这个咱们就不给大家去写了啊,为什么呢?因为这个说实话特太特殊了,一般情况下咱们都不会遇到,再说了,我们说过用的最多的就是by tap,你只有by tap不行的时候才用by name,那什么叫by tap不行,就是你根据类型匹配到了多个类型匹配的B,但是咱们也说了,以后我们的这个配置文件。
05:42
里面啊,IOC容器中你同个同一个类型的便捷液,你也不可能配置多个,所以说白以后我们用的最多的就是白态B知道吧,好啊行,那在这呢,大家看好,那我们现在咱们可以给他写个就是by name的总结,那by name什么时候来用呢?大家注意,然后当使用啊,然后当这个类型匹配的变,然后有多个时,对不对,然后此时咱们可以此时然后可以使用谁呀,可以使用by name,然后来实现自动装配,实现自动装配OK啊。
06:22
行,这个大家注意,所以说你要用by name,你的前提也是你通过类型匹配到了多个,你才能用by name,你说你类型都不匹配对不对,然后我们当前这个name这个,呃,有一个这个B的ID跟咱们要赋值的属性名一致,它有啥用呢?没有什么用,知道不?所以说by name它就是在我们的by tap的基础上来使用的,OK吧,好啊,行,那这是我们当前基于叉ML的一个自动装配,但是这个东西啊,大家注意,自动装配咱们确实用的很多,但是咱们基于叉L的自动装配其实咱们用的并不多。为什么呢?大家听好了,因为我们现在你看咱们在这写的是一个属性啊,对不对,你既然在这个病里面来写了一个属性,那我们当前的自动装配是针对于谁呢?是针对于我们B里面所有的类类型的属性和接口类型的属性的,对不对?好,那所以我们现在如果有些属性我们需要自己来给它赋值,那大家想一下,你能做得到吗?做不到它是不是都会干嘛,它是不是都会通过自动装配来找到某一个,并来来找到某一个,并为当前的属性扶持,所以说呢,我们以后自动装配用的很多,但是我们基本上用的都是基于注解的自动装配,因为基于注解的自动装配是怎么来实现的,你在哪个成员变量上加上的有注解,那当前这个成员变量就会自动装配,OK吧,是这样的啊,好OK,但是大家呢,也要知道,最起码咱们要知道什么是by tap。
07:55
什么是by name?因为咱们一会儿要讲的基于注解的自动装配,它其实也是by tap和by name的方式啊。
我来说两句