SpringBean生命周期
2023-12-26 09:27:49 18 举报
SpringBean生命周期
作者其他创作
大纲/内容
参考资料:https://www.cnblogs.com/zrtqsk/p/3735273.htmlhttps://mp.weixin.qq.com/s/6fof7WE4EDPSOtIlSEFi-Ahttps://blog.csdn.net/andy_zhang2007/article/details/86514320
RootBeanDefinition类:表示根bean定义信息
执行InstantiationAwareBeanPostProcessorAdapte的postProcessBeforeInitialization方法
初始化方法前后
CommonAnnotationBeanPostProcessor
执行InstantiationAwareBeanPostProcessorAdapter的determineCandidateConstructors方法
容器初始化
将配置信息解析为BeanDefinition
别名注册接口(AliasRegistry)
属性赋值(Populate)
extend
BeanDefinitionBuilder(构建BeanDefinition的工具类)
注解的方式
容器创建成功,提供使用
实例化Bean(执行Bean构造方法)
BeanDefinition接口
合并-依赖关系
ConfigurationClassBeanDefinition类:表示通过配置类中@Bean方法定义bean信息
1.@PreDestroy注解后的方法;2.实现DisposableBean,destory方法;3.配置bean的时候指定的destroy-method。注:同时存在则按照1.2.3的顺序执行
EnvironmentAware:注入Environment对象EmbeddedValueResolverAware:注入EmbeddedValueResolver对象ResourceLoaderAware:注入ResourceLoader对象ApplicationEventPublisherAware:注入ApplicationEventPublisher对象MessageSourceAware:注入MessageSource对象ApplicationContextAware:注入ApplicationContext对象 等。。。。
对@Resource 标注的字段、@Resource 标注的方法、 @PostConstruct 标注的字段、 @PreDestroy标注的方法进行缓存
运用
对@Autowired、@Value 标注的方法、字段进行缓存
AnnotatedBeanDefinitionReader
postProcessMergedBeanDefinition(对合并之后的BeanDefinition进行再次处理)
调用自定义销毁方法方法
AnnotatedBeanDefinition接口:表示通过注解的方式定义的bean信息
EnvironmentAware:注入Environment对象EmbeddedValueResolverAware:注入EmbeddedValueResolver对象ResourceLoaderAware:注入ResourceLoader对象ApplicationEventPublisherAware:注入ApplicationEventPublisher对象MessageSourceAware:注入MessageSource对象ApplicationContextAware:注入ApplicationContext对象
阶段二:Bean元信息解析阶段
实例化后阶段执行InstantiationAwareBeanPostProcessorAdapter的postProcessAfterInstation方法方法返回false的时候,后续的Bean属性赋值前处理、Bean属性赋值都会被跳过了。
属性
GenericBeanDefinition类:通用的bean定义信息
Destroy三种方式
继承
实例化BeanPostProcessor接口实现类
在bean实例化之前给开发者留了个口子,开发者自己可以在这个地方直接去创建一个对象作为bean实例,而跳过spring内部实例化bean的过程;这个地方给开发者提供了一个扩展点,允许开发者在这个方法中直接返回bean的一个实例。实际上,在实例化前阶段对bean的创建进行干预的情况,用的非常少,所以大部分bean的创建还会继续走下面的阶段。
实现
Aware接口
BeanPostProcessor
自定义初始化方法
注册
PropertiesBeanDefinitionReader
Xml文件方式
properties文件的方式
将有父子依赖关系的bean进行合并之后的rootBeanDefinition
实例化方法前后
四种定义方式
执行InstantiationAwareBeanPostProcessorAdapte的postProcessAfterInitialization方法
MergedBeanDefinitionPostProcessor
阶段三:BeanDefinition合并阶段
实例化前阶段执行InstantiationAwareBeanPostProcessorAdapter的postProcessBeforeInstation方法
API的方式
接口MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition方法
ChildBeanDefinition类:表示子bean定义信息
实例化InstantiationAwareBeanPostProcessor接口实现类
将bean的class名称转换为Class类型的对象
determineCandidateConstructorspostProcessBeforeInitializationpostProcessAfterInitializationpostProcessBeforeInstationpostProcessAfterInstationpostProcessProperties
属性方位接口(AttributeAccessor)相当于key->value数据结构的一种操作
属性赋值阶段
3种主要的解析方式
spring bean生命周期
1.BeanNameAware(将bean的名称注入进去)2.BeanClassLoaderAware(将BeanClassLoader注入进去)3.BeanFactoryAware(将BeanFactory注入进去)
实例化BeanFactoryPostPrecessor实现类
属性赋值前阶段(可在此修改属性的值)执行InstantiationAwareBeanPostProcessor的postProcessProperties方法返回空的时候,表示这个bean不需要设置属性,直接返回了,直接进入下一个阶段。
Bean注册接口(BeanDefinitionRegistry)
阶段二:Spring Bean注册阶段
Init三种方式
阶段一:Bean元信息配置阶段(bean信息的定义阶段)
将BeanDefinition注册工程方法中
XmlBeanDefinitionReader
阶段四:Bean Class加载阶段
DefaultListableBeanFactory
1.据原始BeanDefinition及其可能存在的双亲BeanDefinition中的bean定义信息\"合并\"而得来的一个RootBeanDefinition;2.每个Bean的创建需要的是一个MergedBeanDefinition,也就是需要基于原始BeanDefinition及其双亲BeanDefinition信息得到一个信息\"合并\"之后的BeanDefinition;3.Spring框架同时提供了一个机会给框架其他部分,或者开发人员用于在bean创建过程中,MergedBeanDefinition生成之后,bean属性填充之前,对该bean和该MergedBeanDefinition做一次回调,相应的回调接口是MergedBeanDefinitionPostProcessor。4.MergedBeanDefinition没有相应的Spring建模,它是处于一个内部使用目的合并自其它BeanDefinition对象,其具体对象所使用的实现类类型是RootBeanDefinition。
spring为开发者提供了一个接口,允许开发者自己来判断用哪个构造器。这个方法有个比较重要的实现类org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor可以将@Autowired标注的方法作为候选构造器返回
postProcessBeforeInitializationpostProcessAfterInitialization
执行BeanFactoryPostPrecessor的postProcessorBeanFactory方法
AutowiredAnnotationBeanPostProcessor
Aware接口,等
ApplicationContextAwareProcessor接口(只能在ApplicationContext环境中使用)
0 条评论
下一页