spring的后置处理器贯穿了整个spring生命周期,包括bean的实例化和初始化过程,在这个过程中,spring会执行9次后置处理器的调用,我们来逐一分析每个后置处理器的作用吧。
在此之前,spring已经完成了前期的一些工作,比如说,已经将BeanDefinition放到了BeanDefinition Map中。所以我们直接从AbstractAutowireCapableBeanFactory#createBean()方法进行分析:
继续往下执行doCreateBean方法,完成Bean的实例化
protected Object getEarlyBeanReference(String beanName, RootBeanDefinition mbd, Object bean) {
//方法入参bean已经是之前放进来准备提前暴露的实例了
Object exposedObject = bean;
if (bean != null && !mbd.isSynthetic() && hasInstantiationAwareBeanPostProcessors()) {
for (BeanPostProcessor bp : getBeanPostProcessors()) {
//尝试使用SmartInstantiationAwareBeanPostProcessor来改变这个提前暴露的实例,如果没有自定义的来插手这个过程,则还是返回入参的bean实例
if (bp instanceof SmartInstantiationAwareBeanPostProcessor) {
SmartInstantiationAwareBeanPostProcessor ibp = (SmartInstantiationAwareBeanPostProcessor) bp;
exposedObject = ibp.getEarlyBeanReference(exposedObject, beanName);
if (exposedObject == null) {
return null;
}
}
}
}
return exposedObject;
}
完成了Bean的实例化以及属性注入后,来看下initializeBean这个方法吧
第九次调用BeanPostProcessor和Bean的销毁有关,不看了。