00:01
Hello,大家好,我是小石,然后今天在群里的话,有个小伙伴问了一个问题,就是这个和resource有什么区别,然后另一个小伙伴们立立马就回答了一个,就是说这个out是那个的注入模式,先type,然后type之后by type找不到之后开始BY,然后it的话是先BY,找不到的话。呃,是by type,这句话呢,其实并不完全对,为什么不完全对呢?我们来详细解释一下啊。就是在spring中,它的注入自动绑定的模式有四种啊,就是一个,一个就是no,它就是为激活自动绑定,就是需要你手动的设置这个依赖注入的对象,还有一个是by name,就是根据被注入属性的名称作为并的名称进行依赖查找,并将该对象设置到该属性,然后by name by type的话就是根据被注入属性的类型作为依赖。
01:02
类型进行查找,然后将该对象设置到该属性,然后看,呃,就是构上去注入的话是一种。特殊的by type类型啊。就是我举个我举个例子吧。就是假如说这个your到根据by type的话,他就会去找your,呃类型为your到这个类型的呃病,然后注注入呃注入进来,然后假如说by name的话,它会找这个病的名字为you done。然后的病,然后来注入到这个到这个对象中啊。这个应该比较容易理解,然后我们来看一下,就是个的依入的过程,是由这个并post支持的。对,然后对这个不理解的小伙伴可以看一下相关的文档,然后这个out注入的逻辑的源码是在这个。
02:02
呃,就是在这个factory,然后它主,呃,它的主要的注入逻辑就是第一个就是主要的注入逻辑分为如下四步,第一步就是找到所有类型符合的病。所有类型符合的病,然后如果没有类型符合的病,就会看这个outwa required属性是否为true,是的话就直接抛出异常,否则返回。那如果找到了类型只有一个,就将这个并注入,如果找到的类型的并有多个的话。就是会首先选择带primary注解的病,如果只有一个则直接注入,如果有多个病都带有这个primary注解,则直接就报错了啊,如果他没有primary注解的话,他会再看那个。Proper注解,如果只有一个proper注解,然后它会直接注入,如果有多个病的pro注解的优先级相等,则就会报错啊,如果连practice注解它没有的话,它就会进入下一步啊,就下一步选择by name。
03:16
选择by name吗?选择b name和当前要注入的属性名相同的并进进行注入啊,有则注入,没有的话就就报错啊。这里需要注意的一点就是在spring容器中不可能有b name相同的两个B,因为在启动的时候它就会报错啊。这个的话,这个逻辑是我对着源码梳理出来的,然后有兴趣的话可以看一下这个源码,我就不详细解释了。然后主要说这个it results的过程,Its的依赖注入的过程是由这个common并post支持的,然后它具体的逻辑是在这个方法里面的注入逻辑如下,就是如果它指定了it,指定了name,注意如果it resource注解指定了name,它会它只会按照name by name的方式。
04:12
进行查找,By name的方式进行查找,当找不到时直接抛出异常。他并不会BY。对,找到的话,将并注入。如果it results没有指定这个name,则把属性名作为名字进行查找。然后就所以说这个没有指定的话,你就先by name嘛,找不到时才开始by type,然后按照类型查找。所以说你需要注意的,需要注意的一点就是我deb个源码的时候发现了就是it results按照类型查找的逻辑呀,按照类型查找的逻辑和it outwa按照类型查找的逻辑是一模一样的,因为都调用了这个方法,所以说这个结论不完整的,不不完全对的地方就是这个it resource,当它指定了name的时候,它只会按照name进行查找,当找不到时,只会直接会进行,直接会抛出异常,不会按照by type的方式再进行查找,我们来演示一下啊。
05:16
你看我这起了一个这个容器嘛,就是注解式的容器,然后我这写了一个user,就简单的一个这个user service,然后它的一个实现类,嗯,这个我改一下这个it resource进来,It re so result,所以说它是先by name嘛,By name的话肯定是先有的,By by name的话肯定是先有的,我们来演示一下它这个。你看它这个容器能正常的启动,假如说我们来指定它BY内嘛,不是他刚开始我们指定内等于test,你看它spring容器中并没有为test test为呃就是并name为test的到呃就是并嘛,然后我们来启动一下。
06:07
看看他会不会再进行by type查找。可以看到它直接就报错了,然后你看他报错的话,就是这个no being named test,它就是找不到这个。内为test的变,所以说他并没有进行by type的过程,所以说这个要要仔细理理解一下啊,不要就是看网上的那些面试题人云亦云吧,好吧,然后今天的视频就分享到这里了,如果有帮助到你的话,欢迎点个赞。嗯,好吧,我们下期见喽,拜拜。
我来说两句