第二步:启动应用|学习笔记

简介: 快速学习第二步:启动应用

开发者学堂课程【SpringBoot快速掌握 - 核心技术第二步:启动应用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9281


第二步:启动应用


内容简介:

一、运行 run 方法

二、代码模块

 

一、运行  run  方法

1.几个重要的事件回调机制

配置在 META-INF/spring.factories

ApplicationContextlnitializer

SpringApplicationRunListener

只需要放在 ioc 容器中

ApplicationRunner

CommandLineRunner

2.run方法流程

首先创建 stopWatch 进行监听,接下来声明 analyzers 值为空,input 进 configureHead 可查看与做 awt 有关,configureHeadlessProperty 获取SpringApplicationRunListeners  从类路径下 META-INF/spring.factories,而且有些监听器是需要配置的,获取后 listeners.starting  开始回调所有的获取SpringApplicationRunListener.star() 方法,后面  args 命令行参数相当于使用  ApplicationArguments  封装了。再 Configurable 环境准备,进行获取或者创建环境,创建环境完成后进行回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成。然后是打印 banner 图标,创建 applicationcontext,根据判断得到容器类型,因为此处是 web 环境,所以  context 会得到 AnnotationConfigEmbeddedWebAppAnnotationContext,之后用  BeanUtils  工具利用反式 instantiate 创建  ioc 容器,主要决定创建  web.ioc 还是普通 ioc 容器。 FailureAnalyzers 是出现异常时做异常分析报告, FailureAnalyzers(context) 是准备上下文环境,帮助传入了 ioc 容器,运行的环境,包括 listeners 监听器等, context 做保存创建的环境和 ioc 的后置处理注册小组件的准备工作,而且 applyInitialize 调用initialize方法获取所有的创建 SpringApplication 对象时的 initializer,所以是回调之前保存的所有的  ApplicationContextInitializer 的 initialize 方法prepareContext 运行完成以后回调所有的SpringApplicationRunListener  contextLoaded();刷新后容器初始化,进行  ApplicationRunner 和 CommandLineRunner 回调,选择进行干预程度只需要调整相应的监听回调器即可。

 

二、代码模块

public ConfigurableApplicationContext run(String... args){StopWatch stopWatch = new StopWatch();stopWatch.start();ConfigurableApplicationContext context = null;FailureAnalyzers analyzers = null;configureHeadlessProperty();//获取SpringApplicationRunListeners;从类路径下META-INF/spring.factoriesSpringApplicationRunListeners listeners = getRunListeners(args);//回调所有的获取 SpringApplicationRunListener.starting() 方法listeners.starting();try {//封装命令行参数ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);

//准备环境ConfigurableEnvironment environment=prepareEnvironment(listeners,applicationArguments);//创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成Banner printedBanner = printBanner(environment);//创建 ApplicationContext;决定创建 web 的 ioc 还是普通的 ioccontext = createApplicationcontext();analyzers = new FailureAnalyzers(context);//准备上下文环境;将 environment 保存到 ioc 中;而且applyInitializers();

//applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法//回调所有的 SpringApplicationRunListener 的contextPrepared();prepareContext(context, environment, listeners, applicationArguments,printedBanner);//prepareContext  运行完成以后回调所有的SpringApplicationRunListener的contextLoaded();//s 刷新容器; ioc容器初始化(如果是web应用还会创建嵌入式的Tomcat);Spring注解版 refreshContext(context);

//扫描,创建,加载所有组件的地方;(配置类,组件,自动配置)

refreshcontext(context);//从 ioc  容器中获取所有的 ApplicationRunner 和CommandLineRunner  进行回调//ApplicationRunner  先回调,CommandLineRunner 再回调afterRefresh(context, applicationArguments)//所有的 SpringApplicationRunListener 回调 finished 方法listeners.finished(context, null);stopWatch.stop();if (this.logstartupInfo){new StartupInfoLogger(this.mainApplicationclass).logstarted(getApplicationLog(), stopWatch);//整个 SpringBoot 应用启动完成以后返回启动的 ioc 容器;return context;catch (Throwable ex){handleRunFailure(context, listeners, analyzers, ex);throw new IllegalstateException(ex);

相关文章
|
Java
SpringBoot:Jar包工程启动、停止、重启脚本
SpringBoot:Jar包工程启动、停止、重启脚本
1182 0
|
2月前
|
存储 Linux Go
u-boot引导加载程序的命令列表
U-Boot提供的命令集覆盖了从硬件初始化、文件操作、网络配置到系统启动的各个方面,为嵌入式系统开发和维护提供了强大的支持。熟悉并熟练运用这些命令,可以帮助开发者高效地完成系统引导和调试任务。在实际操作中,可以根据具体硬件平台和需求,查阅U-Boot的官方文档或社区资源,以获取更详尽的命令使用方法和示例。
33 1
|
6月前
|
Java Spring
SpringBoot的源码启动的步骤
SpringBoot的源码启动的步骤
|
7月前
|
Java Maven
springboot jar包启动提示没有主清单属性
springboot jar包启动提示没有主清单属性
214 1
|
Java
如何在SpringBoot启动过程中,进行自定义操作?
如何在SpringBoot启动过程中,进行自定义操作?
68 0
如何修改springboot项目启动时的默认图标?
如何修改springboot项目启动时的默认图标?
123 0
如何修改springboot项目启动时的默认图标?
|
Java 应用服务中间件 Android开发
进公司第一步!配置项目环境变量(详细介绍)
进公司第一步!配置项目环境变量(详细介绍)
54 0
|
Java Spring
springboot自定义Banner图(项目启动时打印的spring图)
springboot项目启动一般是以这种方式启动:SpringApplication.run(App.class);
|
Java Spring 容器
SpringBoot 启动时自动执行代码的几种方式
SpringBoot 启动时自动执行代码的几种方式
SpringBoot 启动时自动执行代码的几种方式