所在的位置: html >> html前景 >> Autowiredrequiredas

Autowiredrequiredas

Autowired注解是spring用来支持依赖注入的核心利器之一,但是我们或多或少都会遇到requiredasinglebean,but2werefound(2可能是其他数字)的问题,接下来我们从源码的角度去看为什么会出现这个问题,以及这个问题的解法是什么?

首先我们写一个demo来复现一下这个问题。首先我们有一个抽象类AbstractAutowiredDemo,两个实现类AutowiredDemo1,AutowiredDemo2。然后我们在AutowiredDemoController中通过

Autowired依赖注入AbstractAutowiredDemo。

RestControllerpublicclassAutowiredDemoController{

AutowiredprivateAbstractAutowiredDemoabstractAutowiredDemo;}

ComponentpublicabstractclassAbstractAutowiredDemo{publicabstractStringprint();}

ComponentpublicclassAutowiredDemo2extendsAbstractAutowiredDemo{

OverridepublicStringprint(){return"AutowiredDemo2";}}

ComponentpublicclassAutowiredDemo1extendsAbstractAutowiredDemo{

OverridepublicStringprint(){return"AutowiredDemo1";}}

此时我们启动项目就会出现如下报错,找到了两个,并且列出了找到的两个其实就是抽象类的实现类。

接下来,我们从源码的角度来看看,spring是如何查找依赖并注入的。

与之前查看

Component注解方法一致,我们全局搜索Autowired,会找到一个叫做AutowiredAnnotationBeanPostProcessor,根据命名AutowiredAnnotationXXX我们可以大概知道这个类是用来处理注解

Autowired的。

进入AutowiredAnnotationBeanPostProcessor,从注释上我们可以知道这个类可以处理注解

Autowired,

Value以及如果支持的话还有

Inject,这里我们就只用


转载请注明:http://www.aierlanlan.com/cyrz/5095.html