首页 > 其他分享 >SpringBoot启动流程

SpringBoot启动流程

时间:2022-12-01 10:44:48浏览次数:41  
标签:run SpringBoot 启动 流程 springframework primarySources Class SpringApplication clas

  • run方法启动时传入了当前类 ContractApplication.class,传入当前类的作用主要是为了解析当前类上面的注解(不一定传递当前类,也可以自己写一个类,在写的类上添加对应的注解)
@SpringBootApplication
@ComponentScan("com.example")
public class ContractApplication {
    public static void main(String[] args) {
        SpringApplication.run(ContractApplication.class);
    }
}
  • 将传入的类封装成一个Class类型的数组
    public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
        return run(new Class[]{primarySource}, args);
    }
  • 生成一个SpringApplication对象,在调用SpringApplication的run方法
    public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
        return (new SpringApplication(primarySources)).run(args);
    }
  • new SpringApplication()构造方法,主要是给SpringApplication对象中的属性赋值
	public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
                //资源加载器
		this.resourceLoader = resourceLoader;
                //判断传进来的类是否为空
		Assert.notNull(primarySources, "PrimarySources must not be null");
		this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
                //1.推测项目的应用类型(通过项目目录结构,和类),NONE(不是Web项目),REACTIVE(Web应用,响应式),SERVLET(Web应用,springmvc)
		this.webApplicationType = WebApplicationType.deduceFromClasspath();
                //2.从spring.factories中获取需要加载的BootstrapRegistryInitializer类型的的实现类
		this.bootstrapRegistryInitializers = new ArrayList<>(
				getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
                //3.从spring.factories中获取需要加载的AppliationContextInitializer(初始化器)类型的实现类
		setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
                //4.从spring.factories中获取需要加载的ApplicationListener(应用监听器)类型的实现类
		setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
                //5.推测出Main类(main()方法所在的类)
		this.mainApplicationClass = deduceMainApplicationClass();
	}
  • spring.factories
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

标签:run,SpringBoot,启动,流程,springframework,primarySources,Class,SpringApplication,clas
From: https://www.cnblogs.com/blackyoumo/p/16940591.html

相关文章

  • SpringBoot+Bootstrap+Thymeleaf+Restful 实现图书商城管理
    课程名称:企业项目实训II设计题目:大学当图书商城已知技术参数和设计要求:1.问题描述(功能要求):1.1顾客端1)注册登录:游客可浏览所有图书,只有注册用户才能添加购物车、下订单......
  • 流程图(Mermaid)
    graphLRemperor((朱八八))-.子.->朱五四-.子.->朱四九-.子.->朱百六朱雄英--长子-->朱标--长子-->emperoremperor2((朱允炆))--次子-->朱标朱樉--次子-->emperor朱......
  • 生产环境核心数据库切换流程
    1.整体原则按现有架构搭建一套全新的SQL群集,将现有的业务数据库迁移到新设备1、使用单台共享存储架构,不考虑使用alwayson的数据库架构,继续使用SQL群集架构2、尽量减......
  • 记录mysql服务突然不能启动,报错:windows无法启动MYSQL服务(位于本地计算机)错误1067进程
    发生这个问题的背景:在删除一些不用的数据库,然后点别的库突然报一些之前写sql时的错误,然后我就把mysql服务关了,当再点击启动时就报下边这个错了。又试了重启电脑仍然没有......
  • iOS 生成证书、描述文件、打包上架Appstore详细流程
    简介我打算将生成证书,描述文件、上架App的步骤一步一步写下来,于是就有了这篇文章编译环境系统版本:macOSSierra10.12.6​​Xcode​​:v9.2(9C40b)1.开发者账号​​苹果官......
  • 快速绘制流程图「GitHub 热点速览 v.22.47」
    画流程图一直是研发的一个难题,如何画得通俗易懂已经够让人头疼了,还要美观大方。用d2的语法描述下流程,d2会自动帮你生成一张配色极佳的流程图。说到研发的选择,本周特推......
  • SpringBoot项目出现404错误--且控制台无任何信息
    直接上链接:(138条消息)SpringBoot项目出现404错误_露天赏雪的博客-CSDN博客_springboot404我自己的错误原因:有启动类的包,也有自己的包,但包不在一起,所以根本访问不到自己......
  • vuecli3项目集成到springboot
    路径配置当springboot中设置项目访问路径server.servlet.context-path=/demovue项目中vue.config.js需配置publicPathmodule.exports={transpileDependenc......
  • tomcat_安装&卸载&启动以及启动问题分析
    tomcat_安装&卸载&启动以及启动问题分析Tomcat:web服务器软件1.下载:https://tomcat.apache.org/2.安装:解压压缩包即可注意:安装目录建议不要有中文和空......
  • springboot缓存之缓存工作原理
    核心:使用CacheManager[ConcurrentMapCacheManager]按照名字得到Cache[ConcurrentMapCache]组件    key使用keyGenerator生成的,默认是SimpleKeyGenerator   ......