spring容器创建过程

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

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
Spring 容器Spring 框架的核心组件之一,负责管理和维护应用中对象的生命周期。Spring 容器创建对象主要是通过依赖注入(Dependency Injection, DI)机制来完成的。以下是 Spring 容器创建对象的基本流程: 1. 配置元数据:Spring 容器根据提供的配置元数据来管理应用中的对象。配置元数据可以是 XML 文件、注解或 Java 配置类。 2. 容器实例化:创建 Spring 容器实例,比如通过 `ClassPathXmlApplicationContext` 或 `AnnotationConfigApplicationContext` 类。 3. 加载Bean定义:容器读取配置信息,根据提供的配置元数据识别出需要管理的 Bean 定义。Bean 定义中包含了 Bean 的类信息、作用域(singleton、prototype)、生命周期回调方法等。 4. 实例化Bean:Spring 容器使用反射等技术,根据 Bean 定义中的类信息创建对象实例。如果 Bean 配置了依赖,容器会自动处理这些依赖,将它们注入到对象中。 5. 设置属性值和依赖:通过 setter 方法或者字段注入的方式,Spring 容器为 Bean 设置属性值以及注入其他 Bean 的引用。 6. 调用Bean的初始化方法:如果 Bean 实现了特定的初始化接口(如 `InitializingBean`),或者定义了初始化方法(通过 `<bean>` 标签的 `init-method` 属性指定),容器会调用相应的初始化方法。 7. 使用Bean:完成上述步骤后,Bean 就可以被应用中的其他部分使用了。 8. 销毁Bean:当容器关闭时,如果 Bean 实现了销毁接口(如 `DisposableBean`),或者定义了销毁方法(通过 `<bean>` 标签的 `destroy-method` 属性指定),容器会调用相应的销毁方法来释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值