一个 bean 经历了 createBeanInstance()
被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。这最后一步就是初始化,也就是 initializeBean()
,所以这篇文章我们分析 doCreateBean()
中最后一步:初始化 bean。
-
protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) {
-
if (System.getSecurityManager() != null) {
-
AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
-
// 激活 Aware 方法
-
invokeAwareMethods(beanName, bean);
-
return null;
-
}, getAccessControlContext());
-
}
-
else {
-
// 对特殊的 bean 处理:Aware、BeanClassLoaderAware、BeanFactoryAware
-
invokeAwareMethods(beanName, bean);
-
}
-
Object wrappedBean = bean;
-
if (mbd == null || !mbd.isSynthetic()) {
-
// 后处理器
-
wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
-
}
-
try {
-
// 激活用户自定义的 init 方法
-
invokeInitMethods(beanName, wrappedBean, mbd);
-
}
-
catch (Throwable ex) {