下面是最终启动的Spring Boot初始化步骤的描述
DispatcherServlet。
范例程式码
@EnableAutoConfigurationpublic class TestSpring { public static void main(String[] args) throws Exception { SpringApplication.run(TestSpring.class, args); }}Spring Boot初始化步骤
步骤如下:
SpringApplication.run()
创建EmbeddedWebApplicationContext
应用程序上下文;- 调用其
refresh()
方法; - 刷新过程读取起始类的注释
TestSpring
。它寻找导入注释。EnableAutoConfiguration
是其中之一。对于导入批注,刷新过程会从批注中获取相应的类value
并调用其selectimports()
方法。 - 在的情况下,
@EnableAutoConfiguration
相应的类EnableAutoConfigurationimportSelector
,其selectimports()
负载吨从其他进口选择器meta-INF/spring.factories
; - 此过程递归地继续。另外,将读取这些导入选择器中的所有bean定义。也就是说,它包括由带有
@Bean
注释的方法定义的bean ,即需要Spring上下文自动调用相应方法以实例化它们的bean。 - 的
resfresh()
继续并达到onRefresh()
,该createEmbeddedServletContainer()
方法被称为内部; - 在上一步读取的Bean定义中,
ServletContextInitializer
将搜索并实例化Bean实现。其中之一是bean,它是通过extendDispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration#dispatcherServletRegistration()
的ServletRegistrationBean
类型方法定义的ServletContextInitializer
。您可以从类的名称中猜测,此类初始化程序在调用其方法时将给定servlet(在本例中为 DispatcherServlet )添加到给定;ServletContext``onStartup()
- 创建了一个tomcat嵌入式服务器(尚未完全启动)。
ServletContextInitializer
在上一步中找到的所有s都传递给此tomcat初始化- 在这里onStartup()
,这些ServletContextInitializer
s 的方法被调用DispatcherServlet
并被创建并注册为servlet; onRefresh()
应用程序上下文结束;- 在
finishRefresh()
被称为Tomcat所在最终被启动TomcatEmbeddedServletContainer.start()
; refresh()
应用程序上下文结束和其他最终初始化步骤;- 该应用程序正在运行。



