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   

 

posted @ 2022-04-27 13:49  liubingPersonalBlog  阅读(13)  评论(0)    收藏  举报