本次介绍采用的构造注入,在Bean创建时候就注入属性,(属性注入同理,只不过入口不同)。
1.首先解析出当前Bean拥有几个构造器,当前Bean的话只存在一个,进入autowireConstructor方法之后会循环构造器进行参数的解析操作。
此处开始真正的解析参数获取Bean对象
参数类型如果是数组,Collection,Map类型则会被此方法解析,如果是单个对象则会被findAutowireCandidates方法进行解析
此处解析map,需要注意的是key的类型一定要是String,用来存放beanName,value就是对应的BeanType,否则就不会继续解析。@Autowired注解的注释也有说明
匹配方法在于
BeanFactoryUtils.beanNamesForTypeIncludingAncestors
会调用beanDefinitionNames循环匹配,等同于instanceof循环比较
将匹配的Bean进行返回
注:单个类型的Bean和多个类型的Bean匹配逻辑是同一套,只不过单个Bean如果匹配到多个符合条件的候选项的情况下,最终会通过Bean名称进行匹配。