Bean的生命周期源码流程图
2021-04-01 15:25:06 4 举报
Bean的生命周期源码流程图描述了Spring容器在管理Bean对象时所经历的各个阶段。首先,当一个Bean被实例化后,它会被加入到容器中进行管理。接着,容器会调用Bean的初始化方法进行必要的配置和准备工作。然后,当容器需要使用这个Bean时,它会从容器中获取该Bean的引用并调用其业务方法。如果Bean实现了DisposableBean接口,容器会在Bean不再使用时调用其销毁方法进行资源释放。最后,当容器关闭时,它会销毁所有管理的Bean对象。整个过程由Spring容器负责协调和管理,确保Bean的生命周期得到妥善处理。
作者其他创作
大纲/内容
N,不存在,去创建Bean
执行MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition方法,这里会对合并后的BeanDefinition进行处理,另外,这里会解析@Autowired注解,先找出注入点
getMergedLocalBeanDefinition(beanName),进行BeanDefinition的合并
将当前创建出来的bean提前暴露
beanName
调用initializeBean方法进行初始化
getBean(beanName)子流程
doGetBean
N,不是FactoryBean
执行BeanDefinition中指定的InitMethod
单例Bean的创建流程
如果当前BeanFactory中不存在当前beanName所对应的BeanDefinition
获取父BeanFacotry
执行BeanPostProcessor的postProcessAfterInitialization方法
BeanClassLoaderAware
获取SmartInitializingSingleton类型的单例
调用populateBean方法填充属性
getObjectForBeanInstance()基于单例池中存储的对象获取真正的bean对象,比如FactoryBean,在这个里面就会调用getObject方法生成Bean对象
getBean(beanName)
没有得到,则创建
执行InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation方法
getBean(\"&\"+ beanName)
如果上述步骤都没有对属性进行填充的话,就会执行InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法
resolveBeforeInstantiation(),实例化前
检查BeanDefinition中定义的dependsOn,先创建所依赖的Bean
执行BeanPostProcessor的postProcessBeforeInitialization方法
如果是SmartFactoryBean,并且isEagerInit为true
如果BeanDefinition是isAbstract,那么抛异常
则调用parentBeanFactory的getBean()方法去获取Bean
是否是FactoryBean
如果得到了,则直接返回,如果没有得到则创建
Y,是FactoryBean
创建单例Bean
判断当前BeanDefinition的AutowireMode,按照byName或byType进行属性填充
doGetBean(beanName)
getSingleton(beanName)从单例池获取bean对象
Y
其他scope的Bean的创建流程
调用afterSingletonsInstantiated方法
初始化子流程
执行InitializingBean接口的afterPropertiesSet方法
判断BeanDefinition的scope,分别进行处理
填充属性子流程
BeanFactoryAware
BeanNameAware
获得合并后的BeanDefinition
如果是FactoryBean,先从factoryBeanObjectCache中获取对象,如果缓存中为null,则调用getObject()生成bean对象,并放入factoryBeanObjectCache中
在单例池中存不存在
执行InstantiationAwareBeanPostProcessor的postProcessProperties方法
在这个其中还会调用BeanPostProcessor的初始化后的方法,进行AOP
执行AwareMethods
原型Bean的创建流程
Y,存在
0 条评论
下一页