依赖注入核心流程
2021-10-20 15:48:32 0 举报
@Autiwired依赖注入核心流程
作者其他创作
大纲/内容
箭头实属无奈
org.springframework.beans.factory.support.DefaultListableBeanFactory#resolveDependency依赖注入核心方法
报错
找到了
是否找出了唯一Bean
Y
根据Type有没有找到bean
doResolveDependency方法详解
N
返回null
否
Object shortcut = descriptor.resolveShortcut(this);如果当前descriptor之前做过依赖注入了,则可以直接取shortcut了,相当于缓存从beanFactory中取的
如果没有@primary,那么则看Bean上是否通过@Priority定义了优先级,如果定义了那么就获取优先级最高的Bean(越小级别越高)
没找到
return result;end
isRequired
是
是否超过一个
在调用getObject方法时候调用doResolveDepency
从多个Bean中选择被@Primay标注了的Bean如果有多个@Primary会报错
descriptor.initParameterNameDiscovery(getParameterNameDiscoverer());获取方法入参的名字
返回Object对象
doResolveDependency
如果没有优先级,那么则使用descriptor.getDependencyName()来确定一个唯一的Bean
直接返回改bean,如果是Class对象会调用getBan方法生成改对象
平级关系并无顺序
Collection
超过一个
判断上一步获得的result是否为null
getAutowireCandidateResolver().getSuggestedValue(descriptor);判断是否有value注解存在如果存在就获取并解析@Vlue注解进行解析并返回
Object value = getAutowireCandidateResolver().getSuggestedValue(descriptor);获取value的值有的话处理value并return
map
descriptor.getDependencyType()获取所需要注入的类型
只有一个
0 条评论
回复 删除
下一页