spring容器创建过程

本文探讨了Spring容器的刷新过程,重点关注refresh()方法。同时,结合Servlet3.0,讲解了如何利用ApplicationEvent派发器进行事件处理,包括内置的ContextClosedEvent和ContextRefreshedEvent事件。此外,还介绍了如何自定义事件并将其注入到Spring容器中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring容器创建过程

Spring容器的refresh()【创建刷新】

1. prepareRefresh() 刷新前的预处理
	1.1 initPropertySources() 初始化一些属性;子类自定义个性化的属性设置
	1.2 getEnvironment().validateRequiredProperties();检验属性的合法等
	1.3 this.earlyApplicationEvents = new LinkedHashSet<>();保存容器中的一些早期的事件

2.obtainFreshBeanFactory(); 获取bean工厂
	2.1 this.beanFactory=new DefaultListableBeanFactory();在GenericApplicationContext的无参构造中。
	2.2 this.beanFactory.setSerializationId(getId()); 设置序列化Id
	2.3 getBeanFactory 返回刚才GenericApplicationContext创建的BeanFactory对象
	
3.prepareBeanFactory(beanFactory); beanFactory的预准备工作
	3.1 设置beanFactory的类加载器、表达式解析器
	3.2 添加部分BeanPostProcessor【ApplicationContextAwareProcessor】
	3.3 设置忽略的自动装配的接口
	3.4 注册可以解析的自动装配
	3.5 添加BeanPostProcessor【ApplicationListenerDetector】

4.postProcessBeanFactory(beanFactory); BeanFactory准备工作完成后的后置处理
	4.1 但是这是一个空方法 代表子类可以通过重写这个方法在BeanFactory创建并预准备完成以后做进一步的设置
	
=======================以上是BeanFactory的创建以及预准备工作============================


5. invokeBeanFactoryPostProcessors(beanFactory); 执行beanFactoryPostProcessor
	5.1 先执行实现了PriorityOrdered优先级接口的注册表后置处理器
	5.2 再执行实现了ordered顺序接口的注册表后置处理器
	5.3 最后执行没有实现任何优先级或者是顺序接口的注册表后置器
	5.4 再执行BeanFactoryPostProcessor的方法 与上面类似
	
6. registerBeanPostProcessors(beanFactory); 注册Bean后置处理器
	BeanPostProcessor
	DestructionAwareBeanPostProcessor
	InstantiationAwareBeanPostProcessor
	SmartInstantiationAwareBeanPostProcessor
	MergedBeanDefinitionPostProcessor【internaPostProcessor】
	不同接口类型的BeanPostProcessor在Bean创建前后的执行时期是不一样的 后置处理器都默认可以有优先级
	6.1 获取所有的BeanPostProcessor;
	6.2 先注册PriorityOrdered优先级的BeanPostProcessor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值