@Autowired 解析过程
2021-12-30 21:26:40 12 举报
Spring @Autowired 注解的工作过程
作者其他创作
大纲/内容
inject
Map.isNotEmpty
doCreateBean
resolveCandidate
查找 javax.annotation.Priority 注解标注的bean名字
DependencyDescriptor
每次遍历返回一个UserService的子类bean对象
DefaultListableBeanFactory
getBean
这里会调用 BeanFactoryUtils.beanNamesForTypeIncludingAncestors方法,根据UserService 类型获取出所有的子类(因为当前类是接口,所以就不包含了)然后遍历
resolveMultipleBeans(解析多bean的注入)
findAutowireCandidates
resolveDependency
抛出异常NoUniqueBeanDefinitionException
required=false
否
是
size==1
没有找到
InjectionMetadata
AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement
返回bean
@Value 和 @Autowired 都是通过AutowiredAnnotationBeanPostProcessor 处理器来完成工作的
如果Map为空并且依赖的属性@Autowired(required=true)
resolveFieldValue
AutowiredAnnotationBeanPostProcessor
Map.isEmpty
恒不是,一定会抛出异常
populateBean
size 1
可以找到
required=true
抛出异常NoSuchBeanDefinitionException
判断@Autowired
Map.size()
doResolveDependency
postProcessProperties
一个接口可能有多个实现类,如果是这样注入 @Autowried private Collection<UserService> userServices; 或者: @Autowried private UserService[] userServices; 或者: @Autowried span style=\"font-size: inherit;\
查找@Primary注解标注的bean名字
AbstractAutowireCapableBeanFactory
0 条评论
下一页