doCreateBean之populateBean方法详解
该方法在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中有使用到
populateBean方法大致流程图:
(1)对Bean进行判空逻辑
(2)在设置属性前去修改Bean状态,也可以控制是否继续给Bean设置属性值(如果Bean不是Spring限制的 || 具有感知Bean实例化的后置处理器){执行配置上的后置处理器}
(3)如果前面代码设置了continueWithPropertyPopulation = false,表示用户可能已经自己填充了,此时直接返回Bean
(4)从BeanDefinition里面获取到能为Bean设置上的属性值
(5)根据Bean配置的依赖注入方式完成注入
(6)对Bean解析完未设置的属性进行再处理(重新检查是否注册了感知Bean实例化的后置处理器,如果注册了,则重新获取propertyValues(属性集合)然后进行依赖注入)
其中的AutowiredAnnotationBeanPostProcessor(后置处理器)在doCreateBean().applyMergedBeanDefinitionPostProcess()中如果有被执行到的话,会将标记了@Autowired和@Value的存入到metadata.checkedElements缓存容器中
日拱一卒无有尽,功不唐捐终入海