1.第一次bean的后置处理器:解决循环依赖(提前生成代理对象)
SmartInstantiationAwareBeanPostProcessor.getEarlyBeanReference
2.第二次bean的后置处理器:实例化前
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation
3.第三次bean的后置处理器:推断构造函数
SmartInstantiationAwareBeanPostProcessor.determineCandidateConstructors
4.第四次调用bean的后置处理器:构建所有的注入点 @Autowired。。
MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition
5.第五次调用bean的后置处理器:实例化后
InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation
6:第六次调用bean的后置处理器:填充属性
InstantiationAwareBeanPostProcessor.postProcessPropertyValues
7.invokeAwareMethods:调用Aware扩展点
BeanNameAware.setBeanName(beanName);
BeanClassLoaderAware.setBeanClassLoader(getBeanClassLoader());
BeanFactoryAware.setBeanFactory(AbstractAutowireCapableBeanFactory.this);
8.第七次调用bean的后置处理器:初始化前
BeanPostProcessor.postProcessBeforeInitialization(result, beanName);
1.ApplicationContextAwareProcessor.postProcessBeforeInitialization--负责处理剩余的Aware
2.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization--负责处理@PostConstruct和@PreDestroy
9.invokeInitMethods:初始化
1.InitializingBean.afterPropertiesSet();
2.initMethod.invoke(bean);
10.第八次调用bean的后置处理器:初始化后
BeanPostProcessor.postProcessAfterInitialization(result, beanName);