類名:AbstractAutowireCapableBeanFactory#initializeBean
protected Object initializeBean(final String beanName, final Object bean, RootBeanDefinition mbd) {
if (System.getSecurityManager() != null) {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
AbstractAutowireCapableBeanFactory.this.invokeAwareMethods(beanName, bean);
return null;
}
}, this.getAccessControlContext());
} else {
//處理Aware接口的回調
this.invokeAwareMethods(beanName, bean);
}
Object wrappedBean = bean;
if (mbd == null || !mbd.isSynthetic()) {
//後置處理器的調用
wrappedBean = this.applyBeanPostProcessorsBeforeInitialization(bean, beanName);
}
try {
//調用自定義的初始化方法
this.invokeInitMethods(beanName, wrappedBean, mbd);
} catch (Throwable var6) {
throw new BeanCreationException(mbd != null ? mbd.getResourceDescription() : null, beanName, "Invocation of init method failed", var6);
}
if (mbd == null || !mbd.isSynthetic()) {
////後置處理器的調用
wrappedBean = this.applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
}
//返回創建好的Bean
return wrappedBean;
}
1、this.invokeAwareMethods(beanName, bean);
處理Aware接口的回調
2、 wrappedBean = this.applyBeanPostProcessorsBeforeInitialization(bean, beanName);
後置處理器的調用
3、 this.invokeInitMethods(beanName, wrappedBean, mbd);
調用自定義的初始化方法
4、wrappedBean = this.applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
後置處理器的調用
spring源碼09——AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization
5、return wrappedBean;
返回創建好的Bean:
如果如下方法調用過來的:AbstractApplicationContext.registerBeanPostProcessors()
此時創建的bean是擴展了BeanPostProcessor的bean,比如:AbstractAutoProxyCreator;
如果是從如下方法調用過來的:
AbstractApplicationContext.finishBeanFactoryInitialization
測試創建的bean就是我們常用的bean。
AbstractAutoProxyCreator實現了BeanPostProcessor接口。