springboot自动装配和启动源码
2021-07-14 18:57:20 0 举报
springboot自动装配和启动源码
作者其他创作
大纲/内容
spring将配置类加到spring容器
根据web类型创建对应的spring上下文createApplicationContext,这里是AnnotationConfigServletWebServerApplicationContext继承了ServletWebServerApplicationContext,在refresh方法的onRefresh会启动服务器
单独一个线程
使用spring.factories读取
启动main方法
EnableAutoConfiguration
SpringFactoriesLoader.loadFactoryNames
removeDuplicates
加载类
AutoConfigurationImportSelector.selectImports
TomcatServletWebServerFactory.getWebServer
启动tomcat容器入口
真正启动tomcat容器
org
Main-Class: org.springframework.boot.loader.JarLauncher
AbstractApplicationContext.refresh
fat-jar
结束
getSpringFactoriesInstances( ApplicationContextInitializer.class)
getCandidateConfigurations
springboot自动装配开始
BOOT-INF
实现了DeferredImportSelector接口,是一个延迟加载的类,优先级最低,会等spring其他bean定义加载完再加载,最终会调用selectImports方法
target/META-INF/MANIFEST.MF
prepareEnvironment()
getSpringFactoriesInstances( ApplicationListener.class)
maven plugin打包
去重
classLoader.getResources(META-INF/spring.factories)
BOOT-INF/classes和BOOT-INF/lib
SpringApplication.run()
从spring.factories获取配置类
@SpringBootApplication
这里的factor跟踪ServletWebServerFactoryAutoConfiguration看到了是一个tomcat的工厂
指定 Main-Class
setListeners
加载spring.factories文件
loadSpringFactories
ServletWebServerApplicationContext.onRefresh
官方:If the font color=\"#ff0000\
类加载器
入口
SpringApplication初始化,构造方法
开始启动web容器
onRefresh()
AutoConfigurationImportSelector
new SpringApplication
读取配置文件
org.springframework.boot.loader.JarLauncher
分割线
1.由于springboot使用的是maven-plugin打包,将应用程序和依赖的jar打包成一个fat jar2.在fat jar中,包含了BOOT-INF,里面是依赖的jar包和程序的class
springboot启动开始
refreshContext
setInitializers
调用spring容器的refresh()
createApplicationContext()
createWebServer()
@Import
0 条评论
回复 删除
下一页