00:00
好,我们上节课呢,说了一下咱们这个属性赋值相关的内容,那么接下来呢,我们来说一下自动装配,我来创一个新的配置类啊,来重一个O,好,我们来先说它是一个配置类,在这里边呢,来聊我们以前熟悉的这个自动装配,所谓的自动装配呢,哎,就是我们SPA利用咱们这个依赖注入,也就是我们所谓的Di完成完成对容器,对IOC容器中中各个组件的依赖。关系赋值,那么呢,我们就以咱们之前用的这个service do control为例,我们实际在开发的时候呢,诶,我们service里边呢,需要用到DADADAO。
01:14
包括呢,我们这个controller里边呢,又要用到service,哎,比如我们写一个private book service,哎,我们都是这么来用的,那么呢,正好这些do以及service我们都是保存在容中的,让容器来管理的,所以说service要用这个do怎么办呢?我们以前学过一个注解是不叫,哎也说呢,我给它自动装配,包括呢,Controller里边要用service也一样自动装配,然后把我们这些啊,自定义的这些组件,我们利用owa给它自动装配过来,这是我们要说的第一个自动装配,我们要说的第一个叫o wear,我们呢可以来试一下,那如果1O,那这组件就都有值了,我们来就来打印一下哈布克哈布里克。
02:12
咱们这个print就来打印一下,我呢就把这里边的这个do对象我来打印一下就行。Service里边的do对象,好,那么呢,我们把他们这些do service c我们都加在容器中,哎,我现在呢用包扫描的方式,And component。我们来扫描扫描do。包括呢,我们也可以把CTRL扫进来,好,我们来写一个测试类CTRCO。
03:03
在这好,在这个测试类里边呢,我们就从IC容器中我们拿到这个service,我们看service里边我们给它O自动注入book do能不能注入成功。来EST,我们get b,来我们就按照类型来拿book service.class好,我们来拿到book service,那如果拿到了以后呢,我们来输出一下这个book service等一下,那要输出呢,我们就直接给它加个to string方法吧。To string方法,或者呢,大家来调用这个print方法,把它所用的这个book丢打印一下都行,好我来写咱们这个测试这一块呢,变一下,我们加载的不是这个配置类了,加载的是man con啊,我们这个O来测试。
04:05
走,哎,大家能看到book service里边book do对象是有的,是咱们这个book do4de,那么这个是不是我们IC容器中的do呢?一定是的,Application然get b,我们把容器中的丢欧拿过来,拿过来,那么呢,我们可以把这个不可丢欧我也打印一下,看一下我们这两个不可丢是不是一样的,哎,我们这叫4D150,哎,这个呢,也是4D150,也就说这两个不可丢是一样的,这就是我们说的第一种O,哎,我们叫自动注入,自动注入的工作原理是什么呢?也就说我们以book service为例,我们有一个组件,哎,需要用到另外一个组件。
05:03
不卡DAO。我们需要用到book do,而我们呢,只需要给另外咱们这个属性上呢,我们加一个注解。那么呢,这个组件就能拿过来,怎么拿过来呢?它是默认,默认优先按照类型去容器中找对应的组件,就相当于我们刚才测试调用的这个方法,诶我们按照类型去先来找咱们这个book do,如果找到那就给它赋值,找到就赋值,那么如果说我们LC容器中这个类型的组件有多个,怎么办呢?我来注册上多个,这一个叫不可do,另外呢,我们在容器中,哎,我们写咱们这个man con配置,我们扫描进来一个do,我呢再给它这我们用at b再来加一个do book do。
06:12
Return用一个book do,我们用at b的方式,那么要用at b的方式的话呢?啊,我们给容器中默认加的这个不可丢,哎,名字呢,就是这个类名小写,我们说这些啊,啊名字默认是类名首字母小写的方式,那么呢,我们现在呢,给这再来加一个do,假设呢,我们就叫book da2哎现在呢有两个不可do,那它怎么办呢?哎,我们为了知道这个不可do装配的到底是哪个,我们给这个不可丢上加一个标识,比如label标签,这个我们把它的get方法写上。
07:02
这个标签呢,我们给它默认负一个值,默认负一个值呢,就叫一,那么如果是我们自己在这儿给容器中加的不可敌。我们就给它设成二,我们看一下它打印的是哪个book,丢加set label写一个二,那么现在呢,有两个book do,一个叫book do,二,一个呢叫book do,我们在book service中利用owa自动注入book do,我们看注入的是什么。我们把不可丢,因为它有label,我们把这个图string打印过来,我们一会儿呢就能在控制台看到。走哎,我们发现它默认注入的是LABEL1,为什么是LABEL1呢?这是因为我们优先先按照类型去找,如果找到了多个,找到多个相同类型的组件,然后呢,再将咱们这个属性名作为主性的名,再将咱们这个属性名。
08:19
属性的名称作为组件的ID去容器中查找,也要说呢,我们之前呢,是先按照类型,哎直接找到了,但是呢,我们发现找到多个,如果只找到一个,那就没问题,按照类型我们找到多个了,然后呢,我们这个属性名就会作为ID,哎,我们相当于调这个方法找到组件再复制给他,所以说呢,我们装配的是一,我怎么让它装配二呢?哎,我改一个book可DO2,不可DO2,我们把这个属性名呢改成不可DO2,这样的话呢,啊,我们这个名字叫不可DO2。
09:04
他呢就来找到多个的情况下,诶,我们看用到的是LABEL2,因为我们呢,在这里边我们装配了一个book do2,名字恰好叫它,所以说呢,我们这中有时候找到多个按照名字装配,所以说呢,大家就注意了啊,如果容器中我们这个组件可能会有多个啊,这个名字呢,就不要乱写,当然我们还可以直接啊,虽然我们写上不可DO2了,我就想让它装配不可do一行不行呢,也可以,我们指定这个有一个注解叫Co范,哎装配我们来指定呢,我们说你去给我用book DAO就行了,也就说呢,我们使用call范可以明确指定我们要装配到组件ID,使用call范指定要装配的组件ID,而不是让它默认的来去用属性名指定需要装配的组件的ID,而不。
10:05
是使用属性,然后呢,这种也是可以的,哎,我们现在用我们来指定来装不可do了,那我们看是不是默认的LABEL1呢?哎,没事,那就是默认的LABEL1不可do,那我再来写一个book可DO2。哎,指定装配不可丢二,诶它就变成不可丢二,这就是我们所说的咱们这个啊欧以及结合我们可以呢,给容器中来注入这个组件,但是呢,还有一种情况,如果说我们容器中没有这个组件咋办?哎,我们呢,把这个book丢,我也注掉,容器中没有它包括呢,我在O在这的时候呢,我把这个也注掉,那么呢,容器中相当于没有任何一个不可丢欧来看走。
11:00
我们会发现这会有一个错误,我们打开这个解unit来看这个错误解unit。在这儿。这个错误是什么呢?哎,这个错误呢,他说创建咱们这个B有问题。创建宾有问题,他期望有一个B呢能被找到,但是呢,我们来看啊,在这个啊,我们考far指定了不可DO2,也就是说期望能找到不可DO2,但是呢,No such b,也就说没有这个B,那怎么办呢?那说我们相当于说不管怎么说啊,默认都是一定要将属性符号值的,默认一定要将咱们这个属性符号值。赋值好,比如说呢,我们这个不可敌,只要说了自动装配,自动装配。那么呢,一定要在容器中找到这个组件,并给他装配好,否则没有找到的情况,没有就会报错,那么可不可以让他,哎,能找到就装配,没有我们就拉倒呢,就别装配了,那也是可以的,我们来到咱们这个service里边,Service好,那么呢,我们还可以结合O,哎它呢有一个属性叫是否必须,哎,我们来写一个false,默认呢,这个的是处,哎,这是必须的,我们指定为false,那它就不必须的,不必须的情况下,我们来看来走走。
12:41
哎,我们来看这个book service里面的这个do,它现在呢是,但是我们刚才看有报错no such20行点过来,好,我们这还要从容器中获取B啊,我们这个已经没有了。那没有的情况下呢,我们来运行,哎,现在运行也就说呢,我们这个是成功的,也说如果没有的情况下,那组件现在就可以默认是浪了,也就说这就是实现我们的效果了,可以使用咱们这个owa里边的require来调整啊。
13:19
作为非必须的,能装上的装,装不上的拉倒,这就是我们这个,那么呢,这是我们这个,我现在呢,把这个重新打开。这个配置里边啊。我们把这个打开,现在呢,我们还是装上两个,包括呢,呃,我们在这个do,我也把Y加上,那么现在呢,容器中就有两个了。没问题。OK,默认呢,哎,我们现在装到LABEL2了,装到LABEL2的原因啊,就是因为我们在这扣far啊,明确指定这个LABEL2,但是我们这个容器中相同类型的组件有多个情况,我们来回用call far来指定要装配哪个组件啊,还是挺麻烦的,那么呢,我们s spring提供了一个比较强大的注解,哎,我们来说一下这个注解呢,将。
14:21
At primary,哎,Primary,比如说呢,首选的主要的我们来说一下它,也就说呢,我们可以利用这个注解,哎,让spring进行自动装配的时候,让进行自动装配的时候,哎默认使用,默认使用咱们这个首选的B,什么叫默认使用首选的B呢?也就说比如我们举一个例子,我们这个不可DO2,我给它加一个注解叫prime,也就是说呢,意思我们这个book do的类型组件在容器中可能有多个,但是呢,我们每次自动装配首选来装配它,哎要让首选装配起效果,那这个考范自然不能用了,这是明确指定好,我们现在呢,就用首选来装配,不可敌二来测试一下。
15:15
哎,现在呢,LABEL2这是不可丢二,那么与这个属性名现在无关,那把这个属性名删掉。删掉,那么呢,我们再来测试。还是LABEL2比就说呢,我们来指定你首选给我装配这个啊LABEL2咱们这个不可丢二,那我们非要不可丢一可不可以呢?那接下来你就可以用call范你来指定用不可do,比如说呢,在我们没指明确指定的情况下,来装配我们优先级最高的那个首选的B啊,如果在我们明确指定了,那就是不可敌,所以说呢,这是我们来说的这个首选设置说默认啊装配我们首选的B啊,也可以继续使用,那么这个call法指定到底装配哪个。
16:10
指定啊,咱们这个需要啊,装配的名字好,这就是我们啊跟自动装配有关的这些内容。
我来说两句