bean生命周期
2021-10-17 20:02:03 9 举报
AI智能生成
bean生命周期
作者其他创作
大纲/内容
singletonObjects#get(name)从单例池获取
如果没有并且需要bean正在创建中,那么就从下面的缓存中取
earlySingletonObjects#get(name)从早期单例对象获取(二级缓存)
singletonFactory#getObject如果三级缓存有,则调用getObject获取bean
earlySiingletonObjects#put将获取的bean放入到二级缓存
singletonFactories#remove从三级缓存中移除
singletonFactories.get(name)从单例工厂获取(三级缓存)
加锁
singleObjects#get()类似双锁检测,看看有没有
singletonsCurrentlyInCreation#add添加到一个集合,存的是正在创建的bean
beforeSingletonCreation
resolveBeanClass获取Bean的Class
判断是否需要添加到三级缓存(单例、允许循环引用,bean正在创建中)
AbstractAutoProxyCreator#getEarlyBeanReference生成代理对象
SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference如果有这个类型的后置处理器,那么就调用他的getEarlyBeanReference没有就直接返回传进来的Bean这个后置处理器主要用来生成代理对象
DefaultSingletonBeanRegistry#addSingletonFactory()添加到三级缓存,存的是一个ObjectFactory从二级缓存移除
AutowireAnnotationBeanPostProcessor处理@Autowire @Value注解
InstantiationAwareBeanPostProcessor#postProcessPropertyValues属性赋值前回调阶段
bean#afterPropertiesSet
自定义的初始化方法
AbstractAutowireCapableBeanFactory#createBean创建bean
singletonFactory#getObject这里就是调用createBean()
afterSingletonCreation从正在创建的Bean集合中移除
singletonFactories.remove(beanName)从三级缓存中移除
earlySingletonObjects.remove(beanName)从二级缓存中移除
registeredSingletons.add(beanName)将bean名添加到已注册的bean中
生命周期
0 条评论
回复 删除
下一页