Spring容器刷新prepareRefresh第一步是什么


本篇内容介绍了“Spring容器刷新prepareRefresh第一步是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!下面是这部分的涉及到的源码中的关键部分:一上来就修改两个成员变量,active 改为 true, closed 改为 false:成员变量 activetrue 表示当前 context 处于激活状态成员变量 closedtrue 表示当前 context 已经被关闭这里修改了状态,后续有两个地方使用。第一个地方是容器关闭的时候(避免重复关闭)第二个地方是和 BeanFactory 交互的时候作断言用的几乎所有和 BeanFactory 交互的方法都需要调用 assertBeanFactoryActive 方法来检测容器的状态。AbstractApplicationContext 中有二三十个地方使用了该方法。比如最常见的各种重载的 AbstractApplicationContext.getBean(java.lang.String) 方法都会在将方法调用委托给 getBeanFactory().getBean(name, args); 之前调用 assertBeanFactoryActive() 来检测容器状态;毕竟在一个已经关闭了的容器上 getBean() 是不正常的吧。这个方法主要是留给子类用来将 StubPropertySource(占位符) 替换为真实的 PropertySource。比如在 servlet 环境下,会将 ServletContextPropertySourceServletConfigPropertySource 加入(替换 Stub)到 Environment 中。当然,你可以在这里直接 修改/替换 Environment 中的任何 Pro免费云主机域名pertySource。也就是说,可以在这里做类似于 spring-boot 中提供的 EnvironmentPostProcessor 能做的事情。如果是 spring-boot 项目的话,还是推荐直接使用 EnvironmentPostProcessor。 而不是像下面这样再搞一个 ApplicationContext 的实现类。这里主要是验证 ConfigurablePropertyResolver.setRequiredProperties(String... requiredProperties) 方法中指定的那些 必须出现的配置项 是不是都已经在 Environment 中了。所谓的验证,逻辑也很简单:所有指定的配置项名称都遍历一遍,如果发现 Environment 中获取不到对应的配置项就直接抛出 MissingRequiredPropertiesException下面这段代码是验证 validateRequiredProperties() 方法的(同样的功能,可以使用 spring-boot 提供的 EnvironmentPostProcessor 来完成)。
*抛出MissingRequiredPropertiesException异常(Environment中缺少必须出现的配置项”jdbc.url”)
*/
@Test
voidvalidateRequiredPropertiesTest(){
Assertions.assertThrows(MissingRequiredPropertiesException.class,()->{
finalApplicationContextapplicationContext=newAnnotationConfigApplicationContext(PrepareRefreshTest.class){
@Override
protectedvoidinitPropertySources(){
super.initPropertySources();
//这里指定Environment中必须要有一个名为”jdbc.url”的配置项
//如果Environment中没有名为”jdbc.url”的配置项,就会在validateRequiredProperties()方法中抛出MissingRequiredPropertiesException
getEnvironment().setRequiredProperties(“jdbc.url”);
}
};
}
);
}
}什么叫做早期(early)事件?spring 中的事件最终是委托给 ApplicationEventMulticaster(多播器) 发布的。 但现在是在 prepareRefresh 阶段,多播器 实例还没有初始化呢。 这时候要是有事件的话,就只能先将这种 “早期”事件保存下来,等到多播器初始化好之后再回过头来发布这种”早期”事件。处理早期事件 这一步所作的事情就是 初始化 用来 临时 保存 “早期” 事件的两个集合:earlyApplicationEvents: 早期事件earlyApplicationListeners: 早期事件监听器等到后续的 initApplicationEventMulticaster() 之后会回过头来遍历 earlyApplicationEvents 发布事件。详细内容会在 步骤8-initApplicationEventMulticaster()步骤10-registerListeners() 相关的文章中介绍。这里只介绍和 prepareRefresh 相关的内容。“Spring容器刷新prepareRefresh第一步是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: python图像填充与裁剪怎么实现

这篇文章主要介免费云主机域名绍“python图像填充与裁剪怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python图像填充与裁剪怎么实现”文章能帮助大家解决问题。有时候我们需要把图片填充成某个数字的整数倍才能…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/25 22:02
Next 05/25 22:02

相关推荐