您的位置 首页 > 德语词汇

refresh是什么意思(refresh的12个步骤)

大家好,refresh是什么意思相信很多的网友都不是很明白,包括refresh的12个步骤也是一样,不过没有关系,接下来就来为大家分享关于refresh是什么意思和refresh的12个步骤的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

refresh是AbstractApplicationContext中的一个方法,负责初始化ApplicationContext容器,容器必须调用refresh才能正常工作。它的内部主要会调用12个方法,我们把它们称为refresh的12个步骤:

5.invokeBeanFactoryPostProcessors

refresh是什么意思(refresh的12个步骤)

8.initApplicationEventMulticaster

11.finishBeanFactoryInitialization

7891012为准备ApplicationContext

11为初始化BeanFactory中非延迟单例bean

*这一步创建和准备了Environment对象,它作为ApplicationContext的一个成员变量

*Environment对象的作用之一是为后续@Value,值注入时提供键值

*systemProperties-保存java环境键值

*systemEnvironment-保存系统环境键值

*自定义PropertySource-保存自定义键值,例如来自于*.properties文件的键值

*这一步获取(或创建)BeanFactory,它也是作为ApplicationContext的一个成员变量

*BeanFactory的作用是负责bean的创建、依赖注入和初始化,bean的各项特征由BeanDefinition定义

*BeanDefinition作为bean的设计蓝图,规定了bean的特征,如单例多例、依赖关系、初始销毁方法等

*BeanDefinition的来源有多种多样,可以是通过xml获得、配置类获得、组件扫描获得,也可以是编程添加

*所有的BeanDefinition会存入BeanFactory中的beanDefinitionMap集合

*这一步会进一步完善BeanFactory,为它的各项成员变量赋值

*beanExpressionResolver用来解析SpEL,常见实现为StandardBeanExpressionResolver

*propertyEditorRegistrars会注册类型转换器

*它在这里使用了ResourceEditorRegistrar实现类

*并应用ApplicationContext提供的Environment完成${}解析

*registerResolvableDependency来注册beanFactory以及ApplicationContext,让它们也能用于依赖注入

*beanPostProcessors是bean后处理器集合,会工作在bean的生命周期各个阶段,此处会添加两个:

*ApplicationContextAwareProcessor用来解析Aware接口

*ApplicationListenerDetector用来识别容器中ApplicationListener类型的bean

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

*一般Web环境的ApplicationContext都要利用它注册新的Scope,完善Web下的BeanFactory

*这一步会调用beanFactory后处理器

*beanFactory后处理器,充当beanFactory的扩展点,可以用来补充或修改BeanDefinition

*ConfigurationClassPostProcessor–解析@Configuration、@Bean、@Import、@PropertySource等

*PropertySourcesPlaceHolderConfigurer–替换BeanDefinition中的${}

*MapperScannerConfigurer–补充Mapper接口对应的BeanDefinition

*这一步是继续从beanFactory中找出bean后处理器,添加至beanPostProcessors集合中

*bean后处理器,充当bean的扩展点,可以工作在bean的实例化、依赖注入、初始化阶段,常见的有:

*AutowiredAnnotationBeanPostProcessor功能有:解析@Autowired,@Value注解

*CommonAnnotationBeanPostProcessor功能有:解析@Resource,@PostConstruct,@PreDestroy

*AnnotationAwareAspectJAutoProxyCreator功能有:为符合切点的目标bean自动创建代理

*这一步是为ApplicationContext添加messageSource成员,实现国际化功能

*去beanFactory内找名为messageSource的bean,如果没有,则提供空的MessageSource实现

*这一步为ApplicationContext添加事件广播器成员,即applicationContextEventMulticaster

*去beanFactory找名为applicationEventMulticaster的bean作为事件广播器,若没有,会创建默认的事件广播器

*之后就可以调用ApplicationContext.publishEvent(事件对象)来发布事件

*SpringBoot中的子类在这里准备了WebServer,即内嵌web容器

*这一步会从多种途径找到事件监听器,并添加至applicationEventMulticaster

*事件监听器顾名思义,用来接收事件广播器发布的事件,有如下来源

*要实现事件监听器,只需要实现ApplicationListener接口,重写其中onApplicationEvent(Ee)方法即可

*这一步会将beanFactory的成员补充完毕,并初始化所有非延迟单例bean

*conversionService也是一套转换机制,作为对PropertyEditor的补充

*embeddedValueResolvers即内嵌值解析器,用来解析@Value中的${},借用的是Environment的功能

*singletonObjects即单例池,缓存所有单例对象

*对象的创建都分三个阶段,每一阶段都有不同的bean后处理器参与进来,扩展功能

*这一步会为ApplicationContext添加lifecycleProcessor成员,用来控制容器内需要生命周期管理的bean

*如果容器中有名称为lifecycleProcessor的bean就用它,否则创建默认的生命周期管理器

*准备好生命周期管理器,就可以实现

*调用context的start,即可触发所有实现LifeCycle接口bean的start

*调用context的stop,即可触发所有实现LifeCycle接口bean的stop

*发布ContextRefreshed事件,整个refresh执行完成

关于refresh是什么意思和refresh的12个步骤的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023