【DI】
最主要的类:AbstractBeanFactory、AbstractAutowireCapableBeanFactory、SimpleInstantiationStrategy、BeanWrapperImpl
入口:AbstractBeanFactory的getBean();
1、实例化:
首先,在AbstractBeanFactory调用了getBean();
然后,在SimpleInstantiationStrategy调用了instantiate()中调用了BeanUtils.instantiateClass();
2、依赖注入:
首先,在AbstractAutowireCapableBeanFactory调用了populateBean();中调用了applyPropertyValues();对属性注入,进入依赖注入阶段。
然后,在AbstractPropertyAccessor调用了setPropertyValues();循环调用setPropertyValue();
最后,BeanWrapperImpl调用了setValue();反射调用invoke()进行赋值。
附:
beanDefinitionMap:存储配置信息的Map(BeanDefinition)
factoryBeanObjectCache:存储原生Bean的Map(反射创建出来的实际对象)
factoryBeanInstanceCache:存储BeanWrapper的Map(原生Bean的包装类)