spring boot refresh,refresh refresh
00-1010 1前言2从哪里找源头入口3刷新核心方法4总结
00-1010春季在项目开发和面试过程中非常重要。SpringBeanFactory和FactoryBean的区别在之前的文章中已经有所描述,Spring源代码的体验会在后续文章中继续更新。了解一些原理后,应用起来就会得心应手。在项目开发和面试中,你将能很好地战斗和展示肌肉。
00-1010要读取Spring的源代码,需要找到入口文件。一般在Spring项目中,tomcat容器在启动后加载项目中设置的web.xml,项目的配置文件、监听器等内容添加到修改后的文件中。DispatcherServlet尤为重要,其onRefresh方法是其核心操作。但随着springboot的诞生,配置的想法成型后,对源代码的获取相对简单,核心需要关注abstractapplicationcontext . refresh。
获取方法的入口常见的如下所示:
#通过配置文件读取classpathmlapplicationcontext CT=new classpathmlaplicationcontext( bean . XML );#通过配置类加载AnnotationConfigApplicationContext CT=New AnnotationConfigApplicationContext(main config . class );#两者都是AbstractApplicationContext的子类,如下图所示。配置文件加载的ClassPathXmlApplicationContext是构造方法中调用的其父类的刷新方法,而这个方法是核心,称为abstractapplicationcontext . refresh()。
00-1010阅读关于源代码,由于其文件结构复杂,在整理其结构时,要抓大放小,不宜赘述,否则容易迷失方向,忘记来时的路。下图显示了核心方法abstractapplicationcontext . refresh。
对于 refresh 方法主要分为以下核心的 12 个方法:
1prepareRefresh()刷新前的预处理,调用initPropertySources()方法初始化一些属性设置,调用getEnvironment()。ValidateQueredProperties()来检查属性的合法性,并设置EarlyApplicationEvents=newlinkdhashset()来保存容器中的早期事件。2obtainFreshBeanFactory()获取BeanFactory,创建一个刷新的BeanFactory,refreshBeanFactory()并设置容器ID,然后返回创建的DefaultListableBeanFactory对象。3准备BeanFactory(bean factory)bean factory的准备工作,设置bean factory的类加载器和表达式解析器,添加BeanPostProcessor[Application context aware Processor],设置自动组装的接口,添加beanpost处理器。4 postprocessbeanfactory(bean factory)在bean factory的准备工作完成后进行的后处理工作。子类重写这个方法来做进一步的设置。5调用beanfactorypostprocessors(BeanFactory)执行bean factorypostprocessor和bean factory方法的后处理器。在BeanFactory标准初始化之后,将执行BeanFactoryPostProcessor和beanfdefinitionregistrypostprocessor。首先,BeandefinitionRegistry后处理器。根据PriorityOrdered、Ordered和其他未设置的优先级执行postprocessbeandeditionregistry方法,然后执行BeanfactoryPostProcessor。根据相同的优先级执行PostprocessBeanfactory方法。6 RegisterBeanPostprocessors(bean factory)注册BeanPostprocessors(bean的后处理器)。不同接口类型的BeanPostprocessors在bean创建前后的执行时间是不同的。7initMessageSource()初始化MessageSource组件,执行国际化功能、消息绑定、消息解析等。8 initApplicationEventUltimate()初始化事件调度程序。如果容器中没有事件调度程序,则创建一个SimpleApplicationEventUltimate并将其添加到容器中。9onRefresh()是为子容器(子类)保留的,比如在springboot中,用于创建tomcat和jetty容器并启动它们。10registerListeners()在容器的所有项中注册ApplicationListener,并在事件调度程序中注册侦听器。1 finishbeanfactoryinitialization(bean factory)初始化所有剩余的单实例bean。这个方法是核心方法,下面主要流程会详细讲解。12finishRefresh()完成BeanFactory的初始化,IOC容器创建完成。
00-1010本文描述了Spring容器启动的核心方法refresh,并介绍了主要的启动过程方法。
以上是春季刷新方法分析的详细内容。更多春季刷新方法,请关注风行IT其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。