00:00
好,我们来接着往后说啊,呃,那上午的话呢,我们把这个autobe啊,就是我们呃这样的一个注解呢,给大家简单的去用了一下啊,其实呢,就是来进行我们这个组件装配啊,用到了这个auto表的注解,好那么接下来的话呢,我们就来具体给大家去解释一下这个auto啊,这个注解它的一个这个工作原理是什么样子的,好那么首先呢,呃,我们先来看一下这个位置啊,呃,就是当我们。在我们的配置文件里面去配置的啊,Con component啊,就是我们开启了这个组件扫描的时候,就是你的这一个配置呢啊,它会帮我们自动注册一个B的后置处理器,那么这个病的后置处理器叫什么呢?叫做auto to的a notation b post process,那么这个后置处理器我们是不是也讲过啊,讲过这个后置处理器吧,OK,然那他就会帮我们自动的去呃注册一个这样的一个后置处理器,然后这个后置处理器可以做什么事呢?它就可以帮我们自动装配标注了,像我们用到的autob,或者说resource,或者说reject,诶你标注了这些注解的这个属性,它都能帮我们进行装配啊,所以说呢,这个原理的话呢,大家可以啊啊了解一下啊,就是这个东西用到的是一个后置处理器啊好,呃,那这个的话,大家就主要是做一个了解就行了啊,然后这个地方呢,我们提到了,呃,除了out well之外的话呢,还有这个resource或者是这个。
01:27
带着这两个注解呢,啊,我们在这个位置呢,其实也给大简单的去说到了啊,但是呢,这两个东西我们课堂上呢,啊,就不再给大家去讲了,因为他们基本上已经不用了,我们主要用的呢,还是这个autowa的这个注解,所以说呢,大家只需要掌握了autob的这个注解的用法就可以了,明白吧,因为它这个注解的功能是很强大的啊,很强大的,好,来吧,那我们就来说一下它的这个工作原理是什么啊呃,我们就直接回到这个开发工具里面啊,像这一堆东西的话,你下去以后可以自己去看啊,我们都会找到的,来吧,回到这,呃,我们找到我们上午写的来找到上找到这个吧,我们在这个地方呢,来去研究啊,上午呢,给大家留的这个问题,说它是怎么进行自动装配的,那么接下来呢,给大家来做一个解释啊。
02:15
好,首先呢,我这个obel好就是这个注解啊be好,它是在什么呀啊,完成我们并属性的什么呀,完成哎并属性的一个自动装配,OK呃,那现在我们要说的就是什么,它的一个工作机制啊,它是怎么进行工作的啊,这个大家现在研究出来了吗?怎么工作的,中午有研究吗?有没有看了一下没有吗?来没有就听我说了啊,他是怎么工作的呢?那无非就是我们掌握的,要么就是搬内了,要么就是这样搬下了,你可能就是只能是这两种了啊,你不可能是别的了啊那位就听我说了啊,他的这个工作机制是这个样子的,他首先呢,哎首先哎会使用什么呀?BY。
03:15
样的方式好方式进行什么呀,自动来自动装配好,如果因为我们这个搬家子的方式的话,就会遇到一个问题,它可能会匹配到这个多个兼容的类型吧,对不对,OK,所以说我们再强调一下啊呃,如果能唯一匹配啊,唯一匹配则装配成功了啊,则装配成功,那如果说我们匹配到多个兼容的类型呢?诶,如果匹配到多个兼容的兼容类型的病啊,也就意味着什么呢?我在给你进行装配的时候,我匹配到了多个兼容类型的病了啊,匹配到多个兼容类型的病了,那么这种情况下,大家注意放到我们的XL的那种配置里面的话,是不是直接就抛异常了,对吧?哎,直接就抛异常了,但是注意了他呢,还不会立马抛异常,那么他还会做什么事啊。
04:11
做什么事啊,诶注意了啊,就是还会哎还会什么呀,尝试使用什么呀,By name的方式来确定啊一下什么呀啊要就是啊使用by name的方式呢,进行什么呀啊这么来说吧,啊还会尝试使用单倍的方式啊进行什么呀,唯一性的确唯一性确定啊进行什么唯一确定。好,那么假如说我能通过ban name的方式唯一确定下来一个要要进行什么装配的病,那么我就把它装备进去啊,如果说啊,如果能唯一确定好折装配成功,好,如果什么呀,不能什么呀,唯一确定折什么呀啊装备失败,那么也就什么抛出异常了,听明白这个意思了吧,好,所以说呢,这就是他的一个工作机制,那么他不仅会使用by tap,而且还会使用by name。
05:13
能明白了吗?OK,那么接下来呢,我们就来把这个呢给大家做一个演示哈,然后呢,我们对它的这个理解呢,一定要什么加深啊,好,那么接下来我们来看,呃,现在的话呢,我就拿上这个DAO来去演示,呃,因为我现在呢,希望给我的这个service里面呢,去装配一个DAO,那么因为现在我只有一个DAO,大家看到没有是只有这么一个DA啊是吧,说是演示不出来问题哈,那我就再去写一个啊,有个class,我叫什么呀,User DAO,比如说my be的一个音泡,好这个是我使用买杯来去实现的,好,我们来实现我们的user DAO,然后在这个上面的话,你就自然而然要去加上我们的。是不是post这个注解啊,对吧,把这个注解加上,加上以后呢,这里面有一个方法,我们需要给它实现一下,好这里面的话我们就大Co输出一下,输出什么东西啊啊,User DAO,这是我们的my bet的一个实现,好我就把它简单输出一下,那么现在我们来看在我的IOC容器中,现在有几个DAO的对象了,两个了吧,那么你在这个service里面大家注意了啊,我在service里面进行装配的时候,哎,就是我通过object进行装配的时候,首先它会使用by tap的方式,那么我就能找到这两个病了吧,对不对?哎,找到他们两个以后呢,我就要再使用by name的方式进行唯一的确定,那么大家现在来看一下,他能通过by name的方式确定下来其中一个吗?确定。
06:46
能不能?啊,能不能啊啊,好多同学可能还在想班name怎么确定啊,是吧,上午刚才讲过忘了就是用什么呀,用你要装配的这个属性的名字跟我这个每一个B的ID值进行比较吗?那你来看一下你现在要装配的这个属性的名跟这两个其中的某一个相等吗?不相等,那也就意味着现在能确定下来吗?确定不下来,所以说现在我们再来运行我们的测试方法,大家来注意它就报错了,他运行一下,哎,你看一下现在的肯定就报错了,你看只有ne里面说什么呀,他说诶我装备失败了,为什么装备失败的,我期望是单个匹配,但是我还是找到了两个,哪两个呀,一个是JDBC的,一个是MY的,是不是失败了,看到了吧,OK,好,那假如说我能让你唯一确定下来一个,怎么就能让他唯一确定了呢?很明显,现在我通过by tap的方式,我能找。
07:49
找到这么两个,但是呢,我要通过by name的方式来去确定的话呢,那就必须得保证我要装配的这个属性的名字跟你其中某一个B的ID值是不是一样,对吧?OK,那比如说呢,我就把买VE刚刚写的这个吧,我再让他扫描的时候呢,我给他指定上一个ID是不就行了,这是不是相当于指定了一个ID啊,那么指定的ID以后呢,那么当前我的这个病呢,它的ID值就叫user侧DAO,那么你看一下跟它是不是就一样了,所以说现在我们再来运行一下,它就能通过by name的方式确定下来一个,那么我们就能看到my be的这个摄像,是不是把MYVE那个装备进去了,看明白了吗?OK,所以这个大家一定要理解的啊,那么这就是我们。
08:35
O,它的一个工作机制明白了吧,来他的一个工作机制啊,好来这是我们的其中一个,然后呢,我们再来讲啊,假如说啊,假如说说什么呢,你看了哈,现在我们研究的是当他们两个,就是当匹配到多个的时候,它可能会出问题,那假如说我让你一个都匹配不到的时候,你看这两个呢,我都给它注释掉,一个是买be的注释掉了,再把JDBC的这个注解呢也注释掉,相当于我的这两个类有没有被扫进去啊,没有吧,那么也就意味着我在这个地方装配的时候,他能找到要装配的那个病吗?找不到吧?诶我们看一下这种情况又会怎么样。
09:25
来比C一下也报错了吧,为什么报错呀,你来看这个啊,报了一个什么错呢?他说什么呢?你看啊,有一个什么装备失败了,为什么装配失败了,他说你最少得有一个病是能被什么装配的吧,看到没有说说你要注意啊,这两个异常刚刚说的是什么呀?我期望是单个匹配,但是我找到了多个,而现在一个都没有的时候呢,他说你最少at list就是最少你得有一个能让我进行装备,那也就意味着多了也不行,少了呢也不行,听懂了吧,所以说这个地方我要给大家解释了啊,另外一个工作机制啊,来写到这儿,就是默认情况下好使用什么呀,At auto to,好,标注的属性必须被装配好,如果什么呀?好,如果找不到如果。
10:25
怎么样,如果这个呃,装配不了啊,装配不了,装配啊不了好也会什么呀啊也会什么抛出异常,能明白这个意思了吗?啊,他也会抛出这个异常啊,抛出异常好啊,那这个说完以后大家注意了啊,那如果说现在我想实现这样的一个功能,我加上这个奥洲贝尔了,那我希望实现什么效果呢?如果能装配呢,你就给它装配进来,如果装配不进来呢,你就不要给他进行装配,你也别给我抛出异常。
11:01
就是什么,你就不装配就行了,能找到你的装备找不着到你就别装配了,你就是默认是什么值就是什么直觉行了,现在怎么办?看注意了啊,我们可以在这个outb里面呢,给它设置,设置怎么设置呢?我们使用一个required等于false。好,我们使用什么呀?Required等于false OK,就是我们可以什么可以使用。好,Require等于false来设置,好来设置,不是必须要被装配,听懂这个意思了吗?也就意味着人家默认值是什么呀?True吧,哎,True就是require必须的嘛,是吧?哎,如果是true的话,就是必须被装配,那我现在把它改成force了,那就意味着可选了啊,你可以装配,你也可以不装配,那么这种情况下大家注意,现在你肯定还是装备不上的吧,因为这两个东西都不存,不存在嘛,那么你装备不上的话,我再来运行会出现什么问题啊?
12:08
什么问题啊?我不装配的话,这是一个什么呀,空吧,空调方法啥问题啊哎,空指针吗?来看一下是不是我们的空置针啊,你看这个位置是不是空置帧啊。看到这个异常了吗?哎,这就是一个空指针异常,那说明什么呀,说明确实是实现了我们想要的效果,有我就给你装配,没有呢我就不装配了。听懂了吧,OK,这个大家也是需要什么记住的啊,也是需要记住的,好,那么我们再来接着往后说下一个,我们说一下,好,假如说呢,现在我又变成这种情况,你看好了啊,呃,买be的呢,我也让他扫进来了,但是呢,我没有指定这个ID,呃,JDBC的呢,同样也扫进来了,也就意味着现在我是不是又有两个同时存在了吧,并且我也没有指定具体的名字,那么对于这个地方的装配来讲,它能不能唯一确定下来一个。
13:09
不能吧,那就怎么着了,是不是报错呀?好,来看一下啊,他现在肯定还是会报错,说什么呀,我希望是一个,但是呢,我找到了两个,对不对,OK,就是一个错啊,好,那么现在我要告诉大家是什么呀,如果说我现在必须要让它能装配进来一个,好,我们还可以使用另外一种方式,什么方式呢?就是在这个上面我们再加上一个注解,叫做什么Co fair。啊,再加一个注解,而这里面的话呢,你就要指定上你具体要装配的那个B的ID值了,比如说现在既有JDDC的,又有买卖的,那么你要让让他装配进来谁呢?OK,那你就把它的ID值给他指定一下,比如说我希望你把D这个JDDC的装备进来,好你把这个拷贝一下,拿到这个位置改成小写,是不是相当于我手动的指定了一下要装配的那个病的ID纸吧,对不对,OK,那么现在的话我们再来看。
14:10
好,运行一下大家来注意,你看是不是就装配成功了,看到了吧,哎,也就意味着什么呢?我们可以啊好,如果有多个兼容类型的病,好如果匹配到是吧,好如果匹配到这个多个兼容类型的病啊,那么我们可以啊啊使用什么呀?QUA好Co菲来什么呀,进一步来指定要装配的好B的什么呀,装配的这个B的ID值啊,就是你把这个进一步指定一下,那么它就能帮你装配进来了。记住了吗?理解了吧,这个眼OK,好就是呃,你可以让他什么按照默认的这种工作机制去做,当然了,我们也可以要手动的去什么呀,帮助他来确定一下啊,这样也是行的啊,那么这是啊另外一种情况,那么还有一种情况再来跟大家去说一下,就是呃,像我们这个auto fair好auto fair的,或者说我们这个刚用到了什么呀,考好注解既可加在什么呀啊既可以加在我们的啊,既可以什么加在我们的这个呃成员变量上是吧,好也可以啊加在什么呀,哎,加在什么对应的这个S方法上,这个能明白什么意思吗?你看哈,就是这不是一个成员变量吗?那本应该我要给人家提供一个什么set user d吧,是不是啊,我应该给他提供一个set方法吧。
15:56
那么其实你看哈,像这两个东西你可以啊,直接把它什么呀,移到这个地方,这样也是能装配成功的,听懂了吧,这样也是可以的啊,我们来测试一下啊,运行一下,看懂了吗?能行不行可以吧,OK,说是大家注意了啊呃,那么我要给大家去解释个什么呀,其实我们以前呢,就是以前开发的时候,我们是不会往这个上面去加的啊,我们都是往老老实实的往这个赛的方法上面去加的,听懂了吧,那么后来呢,他又支持我们可以加到这个成员变量上,那就很省事儿了,这个塞的方法你都不用提供出来,你直接把这两个家伙直接什么放到成员变量上,是不是来得更快一点啊,对吧?所以大家都记住了啊,原理上呢,这个上面也行,这个上面也行,但是呢啊,现在的话,我就比较习惯性的使用什么了,哎,我就比较习惯性的使用放到我们的成员概量上面。
16:56
理解了吧,但是你看到别人加到方法上的话呢,你也要知道他是什么意思啊,这种方式呢,它也是支持的,也是OK的,明白了吗?好,那么这些就是我们o well,它的一个工作机制,好,以及相关的一些什么啊,其他的一些点都听明白了吗?差不多了吧,OK。
17:21
嗯。
我来说两句