spring之bean的生命周期源码分析
一.bean的实例化流程
1. 核心函数createBeanInstance
SpringApplication类(refreshContext函数) ===> ConfigurableApplicationContext类(refresh函数)===> AbstractApplicationContext(refresh函数===>finishBeanFactoryInitialization函数===> preInstantiateSingletons函数 //实例化所有单例(除去懒加载)) ===> ConfigurableListableBeanFactory接口(preInstantiateSingletons函数)===> DefaultListableBeanFactory实现类(preInstantiateSingletons函数)===> AbstractBeanFactory类(getBean函数)===> AbstractBeanFactory类(doGetBean函数)
===> DefaultSingletonBeanRegistry(getSingleton函数)===> AbstractBeanFactory类(getObject函数)===> AbstractBeanFactory类的代理对象(doGetBean函数)===>
AbstractAutowireCapableBeanFactory类(createBean函数)===>AbstractAutowireCapableBeanFactory类(doCreateBean函数)===> AbstractAutowireCapableBeanFactory类(createBeanInstance函数)
2. 核心函数populateBean
AbstractAutowireCapableBeanFactory类(createBeanInstance函数===>populateBean函数)
3. 核心函数initializeBean
AbstractAutowireCapableBeanFactory类(createBeanInstance函数===>initializeBean函数)
二.总结
1.阶段:4个 实例化 属性赋值 初始化 销毁
2.扩展点
2.1 影响多个bean:BeanPostProcessor InstantiationAwareBeanPostProcessor
2.2 影响单个Bean
Aware Group1 === BeanNameAware, BeanClassLoaderAware, BeanFactoryAware
Aware Group2 === EnvironmentAware, EmbeddedValueResolverAware, ApplicationContextAware

浙公网安备 33010602011771号