@Autowired注解的原理

1.AutowiredAnnotationBeanPostProcessor是主要逻辑类

2.AutowiredAnnotationBeanPostProcessor实现接口InstantiationAwareBeanPostProcessor

在bean的实例化过程中,执行populateBean方法中会调用InstantiationAwareBeanPostProcessor的postProcessProperties方法

找到当前bean实例中@Autowired注释的Field及method,然后去beanFactory中取到其值,最后通过反射注入到Bean中

3.AutowiredAnnotationBeanPostProcessor还实现了MergedBeanDefinitionPostProcessor接口

在bean的实例化过程中,执行doCreateBean方法中会调用MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition方法,会填充RootBeanDefinition

4.AutowiredAnnotationBeanPostProcessor还实现了SmartInstantiationAwareBeanPostProcessor接口

方法public Constructor[] determineCandidateConstructors(Class beanClass,String beanName)为了从多个候选构造方法中挑选出合适的一个

@Autowired注释的构造方法,requried=true的只能有一个

5.@Autowired的功能逻辑

1.首先按类型依赖查找

2.如果存在多个则匹配@Primary标记的对象

3.如果没有@Primary标记的对象,则根据优先级高的@Priority找到第一个

4.最后则按字段名称按名称依赖查找

注:

AnnotationAwareOrderComparator用于获取类上的@Priority注解

你可能感兴趣的:(spring)