Spring Boot 如何处理@Autowired(一)
这篇小文可知AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues()最终执行对@Autowired的属性实例进行织入;然后以DefaultListableBeanFactory.resolveDependency()->DefaultListableBeanFactory.doResolveDependency()->DependencyDescriptor.resolveCandidate()->beanFactory.getBean()的链条进行创建field bean实例:

public Object resolveDependency(){
    //省略其他code
    {
            Object result = getAutowireCandidateResolver().getLazyResolutionProxyIfNecessary(
                    descriptor, requestingBeanName);
            if (result == null) {
                result = doResolveDependency(descriptor, requestingBeanName, autowiredBeanNames, typeConverter);
            }
            return result;
        }
}

public Object resolveCandidate(String beanName, Class<?> requiredType, BeanFactory beanFactory)
            throws BeansException {

        return beanFactory.getBean(beanName);
    }

现在是不是豁然开朗了?整个调用链路就清晰起来了~,本来有点懒,就不总结了,总结就交给读者朋友了,欢迎留言加友讨论~


子瞻
1 声望9 粉丝