applicationContext相关加载

文章详细阐述了Spring框架中ApplicationContext的refresh方法执行的12个主要步骤,包括创建BeanFactory、处理BeanDefinition、初始化BeanFactory、国际化支持、事件广播以及生命周期管理等关键环节,这些步骤确保了Spring容器的正确初始化和运行。
摘要由CSDN通过智能技术生成

spring refresh

概述

refresh是一个方法,spring中所有的ApplicationContext容器都需要通过refresh方法初始化;

在这里插入图片描述

处理步骤

其中refresh方法包含12个主要的处理步骤:
在这里插入图片描述

1、第1个步骤做前置准备

2、第2~6步骤创建BeanFactory(ApplicationContext核心功能由BeanFactory完成)

3、第7~12准备ApplicationContext,其中11步创建初始化容器中的单例bean;

1、prepareRefresh

这个过程创建准备Environment对象

Environment对象存储了java和系统的一些键值信息;

最重要的是存储我们自定义配置的application.properties;

总结

  • 作用之一是为后续@value,值注入提供键值

在这里插入图片描述

测试

解析@value注解配置的值

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、obtainFreshBeanFactory

  • 这一步创建或者获取BeanFactory
  • BeanFactory虽然和ApplicationContext是继承关系,但是一般是配合使用的,ApplicationContext对负责bean创建,依赖注入和初始化仍然是直接调用的BeanFactory的方法;
  • BeanDefinition规定了bean的特征,如单例多例,依赖关系
  • BeanDefinition可以通过xml及配置类获得,也可通过组件扫描获得;

BeanFactory通过BeanDefinition收集信息后创建bean

在这里插入图片描述

测试

我们可以看到beandefinition初始为空;

在这里插入图片描述

我们接着在xml中配置bean

在这里插入图片描述

可以看到beandifinition已经不为空;

在这里插入图片描述

也可通过配置类配置bean

在这里插入图片描述

在这里插入图片描述

也可以看到bean被注入了进来;

在这里插入图片描述

3、prepareBeanFactory

  • 完善BeanFactory
  • 了解谁来解析${ },应用ApplicationContext提供的Environment解析
  • 特殊bean的注入,BeanFactory,ApplicationContext

在这里插入图片描述

4、postProcessBeanFactory

在这里插入图片描述

  • 这一步是空实现,留给子类扩展

  • 模板方法的设计模式

5、invokeBeanFactoryPostProcessors

beanFactory的后处理器,充当BeanFactory扩展点;

可以用来补充修改BeanDefinition;

ConfigurationClasProcessor解析@Configuration @Bean import等补充到bean的map中;

6、registerBeanPostProcessors

加入更多的后处理器;

这一步只是注册,后续步骤才会使用;

7、initMessageSource

实现国际化;

容器中有messageSource,如果没有在map中找到,会自动创建;

8、initApplicationEventmulicaster

事件广播器,发送事件给监听器;

通过ApplicationContext的publishEvent(事件对象)来发布;

9、onRefresh

空实现,留给子类;

springboot中的子类在这准备webserver,即内嵌web容器;

10、RegisterListeners

initApplicationEventmulicaster管理发送监听事件,这里管理接收事件

需要实现ApplicationListerer,重写相关方法;

11、finishBeanFactoryInitialization

  • singletonObject单例池
  • embeddevalueresolves内嵌解析器,解析${ };
  • conversionService做类型转换

12finishRefresh

  • lifecycleProcessor生命周期处理器,控制容器内生命周期的管理;
  • 调用context.start可以触发所有实现lifecycle接口bean的start方法;

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值