单例的实例化过程:
AbstractBeanFactory的#createBean
createBean方法里进去, 会看到这里允许提前创建一个Bean实例返回
进AbstractAutowireCapableBeanFactory#doCreateBean,
这几步比较重要:
1.允许修改后的合并定义
2.提前暴露bean 解决循环引用
3.属性填充
这两种可不做属性填充返回 InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation 和 InstantiationAwareBeanPostProcessor#postProcessProperties,
4.初始化 initializeBean:
主要走这四个步骤
1). BeanPostProcessor#postProcessBeforeInitialization
2). ((InitializingBean) bean).afterPropertiesSet(); 执行bean的自定义初始化操作 注解会使用InitializingBean
3). 初始化: 这一步是通过反射执行初始化方法 Method methodToInvoke = ClassUtils.getInterfaceMethodIfPossible(initMethod); methodToInvoke.invoke(bean);
4). BeanPostProcessor#postProcessAfterInitialization
5. 下面就是提前暴露引用对象的单例对象初始化, 这里是三级缓存
至此, bean就可以正常使用
销毁
DisposableBean#destroy 方法