spring Bean生命周期全过程
2021-08-18 18:01:03 0 举报
spring Bean生命周期全过程
作者其他创作
大纲/内容
@AutoWired @Value
找到的beanClass对象
依赖注入
@Qualifier注解的筛查
doClose()
1.AutowiredannotationBeanPostProcessor处理的是@AutoWired、@Value,@Inject注解 2.CommonAnnotationBeanPostProcessor处理的是@Resource注解
bean=null
在你使用的时候通过代理对象获取真实的对象
注册到销毁缓存
beanDefinitionMap
@Resource注入点缓存injectionMetadataCache
@Bean中定义的默认方法
满足
前提条件是非懒加载以及单例bean
经过所有的筛选过程,bean是null就直接报错
bean实例化前
AutowiredFieldElement
1.直接创建一个DependencyObjectProvider对象返回DependencyObjectProvider是实现了ObjectFactory,当使用对象是会调用DependencyObjectProvider中重新的getObject方法2.获取bean也是调用doResolveDependency
byName筛查
第二层筛选
创建适配器对象DisposableBeanAdapter
实例化前调用后置处理器
根据beanName取出@AutoWired、@Resouce注入点缓存
resolveBeforeInstantiation
返回一个bean
其他清理过程
初始化后的后置处理器调用
寻找注入点
取出后置处理器实现了InstantiationAwareBeanPostProcessor接口
封装为RootBeanDefinition
加载class
向容器注册关闭事件
生命周期方法寻找
获取bean
applyMergedBeanDefinitionPostProcessors
处理集合注入
getResourceToInject
调用spring默认的 Aware方法
@Priority注解筛查
程序员创建bean
向jvm注册钩子线程
注册bean所有的销毁方法
bean初始化前的工作
后置处理器是实现了接口InstantiationAwareBeanPostProcessor
普通的注入类型
byType查找bean
LifecycleElement
@AutoWired依赖注入
bean是否是泛型的检查
DisposableBeanAutoCloseable
@Resouce依赖注入查找
调用初始化后 后置处理器
是
读取注册的销毁方法
获取bean,原路返回
找到的bean对象
map.get获取bean对象即可
创建bean/销毁bean的整个生命周期
1.BeanNameAware2.BeanClassLoaderAware3.BeanFactoryAware
@PreDstroy
@Resource依赖注入
实例化Bean
@Primary注解筛查
disposableBeans
注入点为Field
实例化后的后置处理器调用
抛出异常
@Resource
依赖注入点查找
doResolveDependency
createOptionalDependency
BeanDefinition中的销毁方法
调用后置处理器进行依赖注入
bean!=null
getBean
@PostConstuct、@PreDestroy
@AutoWried注入点缓存injectionMetadataCache
否
是否是自动注入候选者
1.getAutowireCandidateResolver().getSuggestedValue(descriptor)2.处理普通字符串@Value(\"xx\")@Value(\"${xxx}\
AutowiredMethodElement
根据@AutoWired过程一样去获取Bean
是否是懒加载的?
生命周期方法缓存lifecycleMetadataCache
bean后置处理器beanPostProcessors
返回多个bean
调用销毁方法
调用适配器中的销毁方法,根据销毁方法的类型和数量去调用
手动关闭
返回代理对象bean
取bean后置处理器
循环读取bean
销毁bean
调用doCreateBeanspring内部创建Bean
注入点为Method
封装
快速获取(缓存beanNae)
注入点/生命周期缓存
注册
初始化前后置处理器,主要是@PostConstrut
spring创建bean
创建一个代理对象返回
InitializingBean中的初始化方法或者BeanDefinition中化方法
InjectMetadata缓存
beanFactory
ResouceElement
生命周期回调方法对象类型
调用销毁
处理@Value
初始化bean
注入点包括Field和Method
找到符合条件的Bean
初始化后
beanfactory.getBean
填充属性方法populateBean
ObjectFactory类型
调设置的初始用初始化方法
BeanFactory目前不存在bean&& @Resource没有设置了name属性
返回对象是否为空
Optinal类型
applyBeanPostProcessorsAfterInitialization
最后将创建好的bean放入单例池
调用postProcessBeforeInstantiation
resolveShortcut(BeanFactory beanFactory)
获取beanclass
返回bean对象
放入
找到下面的4中销毁方法
singletonObjects
容器关闭时
0 条评论
回复 删除
下一页