目录
1. Bean生命周期的几个关键时机点
(1)分析 Bean 的创建是在容器初始化时还是在 getBean 时
单例模式的bean默认是非延迟加载,打断点后在applicationContext容器中可以看到bean对象实例(在调用getBean()方法前,就可以看到容器中存在的该bean对象实例)
(2)分析构造函数调用情况
容器实例化bean时,调用bean的构造方法的时机是在AbstractApplicationContext类refresh方法的finishBeanFactoryInitialization(beanFactory)处。
(3)分析 InitializingBean 之 afterPropertiesSet 初始化方法调用情况
通过如上观察,我们发现 InitializingBean中afterPropertiesSet 方法的调用时机也是在
AbstractApplicationContext类refresh方法的finishBeanFactoryInitialization(beanFactory);
总结:
根据上面的调试分析,我们发现 Bean对象创建的几个关键时机点代码层级的调用都在
AbstractApplicationContext 类 的 refresh 方法中,可见这个方法对于Spring IoC 容器初始化来说相当
关键,汇总如下