Spring生命周期
2023-08-18 12:57:05 10 举报
Spring生命周期流程
作者其他创作
大纲/内容
BeanFactoryPostProcessor用于在实例化Bean之前修改BeanDefinition属性
核心是判断所有已注册的 BeanPostProcessor 对象,是否是 InstantiationAwareBeanPostProcessor的一个实例,是则调用 postProcessPropertyValues 方法,然后对有@Value @Autowired @Qualifier 等属性进行值得填充
开始
把单例的Bean注册到销毁内存中,一旦程序结束,这些Bean需要结束销毁方法
结束
对实现了 BeanFactoryAware、BeanClassLoaderAware、BeanNameAware的对象,进行对应的方法调用
维护的是个Map,key为Name,值为对象的Class
读取XML文件,解析类名和属性
registerBeanPostProcessors提前注册实现了BeanPostProcessor接口的类
核心是判断所有已注册的 BeanPostProcessor 对象,是否是 InstantiationAwareBeanPostProcessor的一个实例,是则调用 postProcessAfterInstantiation 方法
感知对象
可以再增加属性或修改对象信息,或者替换类,但是一般不建议在这里写替换类。常见操作是解析特殊属性
执行 Bean 对象的初始化方法
applyBeanPostProcessorsBeforeApplyingPropertyValues感知对象属性并填充属性值,只填充@注解得属性
填充实例属性
默认的实现类有ApplicationContextAwareProcessor,该类用于判断需要初始化的实例是否实现了 ApplicationContextAware,实现了则调用setApplicationContext 赋予调用上下文能力当然我们也可以实现此类,写自己的逻辑
scop 判断,是单例则加到单例内存中
填充从XML解析得 ref 或 value 的属性的值,这里牵扯到循环引用的问题,一旦 A->A 会不断循环。
该类提供了两个方法:postProcessBeforeInitializationpostProcessAfterInitialization该方法都在对象创建实例之后执行,仍在创建对象过程中
默认的实现类有 DefaultAdvisorAutoProxyCreator,需要进行代理的类进行代理设置。我们也可以自己实现 BeanPostProcessor 的方法去实现其他事情
Bean实例化,通过Class反射得到实例(CGLB)
判断实例化的对象是否实现了 InitializingBean(初始化方法),实现则调用 afterPropertiesSet方法进行自定义初始化操作,或者从BeanDefinition 中获取是否有 initMethodName方法,有则反射调用该方法
封装为BeanDefinition
registerDisposableBeanIfNecessary注册销毁
BeanPostProcessor调用postProcessAfterInitialization初始化之后
applyBeanPostProcessorsAfterInstantiation感知对象是否需要对属性做操作
BeanPostProcessor调用postProcessBeforeInitialization初始化之前
0 条评论
下一页