前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot启动流程梳理

SpringBoot启动流程梳理

原创
作者头像
不畏浮云遮望眼
发布2022-03-20 16:50:10
2900
发布2022-03-20 16:50:10
举报
文章被收录于专栏:记录学习收获记录学习收获

总体流程

  1. 创建SpringApplication

分段解析

创建SpringApplication

  • 主要内容为初始化类加载器、设置资源类、设置web应用类型,设置主方法类,设置初始化类和设置监听器
  • 默认初始化类加载器为null,使用默认类加载器;
  • 默认资源类由构造器参数传入,为springBootApplication启动类
  • web应用类型由classPath下的包来确定,按照优先级分别为REACTIVE,SERVLET和NONE;根据是否引包确定web应用类型;
  • 默认主方法类通过当前堆栈的main方法找到
  • 默认初始化类加载springFactories中ApplicationContextInitializer的实现类;
  • 默认监听器加载springFactories中ApplicationListener的实现类;
代码语言:java
复制
	public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
		this.resourceLoader = resourceLoader;
		Assert.notNull(primarySources, "PrimarySources must not be null");
		this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
		this.webApplicationType = WebApplicationType.deduceFromClasspath();
		this.bootstrapRegistryInitializers = new ArrayList<>(
				getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
		setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
		setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
		this.mainApplicationClass = deduceMainApplicationClass();
	}

关于SpringFactories:

1 SpringFactories是springboot自动装配jar包中类方法的机制

2 当自定义包需要被Springboot加载时,在factories文件中写入org.springframework.boot.autoconfigure.EnableAutoConfiguration = 'xxx',用,号分割

3 当应用springFactories机制引包时,如果需要qualifier注解配合注入的,需要引用全限定包名

*4 springFactories与每个插件的配置类进行配合,完成starter的功能。即springFactories中EnableAutoConfiguration指定插件配置类

*5 更多springFactories相关可以参考这边博客 https://www.jianshu.com/p/00e49c607fa1

关于web应用类型:

1 当不引入Spring Boot Starter Web和Spring Boot Starter WebFlux包时,springboot是单体应用,执行完主程序会直接退出

2 当引入WEBFLUX包且满足其它包限定条件时,应用类型为WebFlux的REACTIVE类型,更多信息可以参考博文https://zhuanlan.zhihu.com/p/143614001

3 当引入Spring Boot Starter Web依赖包时,应用类型为SERVLET,后续会启动TOMCAT容器

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总体流程
  • 分段解析
    • 创建SpringApplication
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com