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

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

开发者学堂课程【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);

相关文章
|
6月前
|
应用服务中间件
【JavaWeb学习】—停止Tomcat服务器的几种方式(九)
【JavaWeb学习】—停止Tomcat服务器的几种方式(九)
|
Java Windows
SpringBoot:Windows平台下JAR包的启动,停止和日志分割脚本
SpringBoot:Windows平台下JAR包的启动,停止和日志分割脚本
2221 0
SpringBoot:Windows平台下JAR包的启动,停止和日志分割脚本
|
Java
SpringBoot:Jar包工程启动、停止、重启脚本
SpringBoot:Jar包工程启动、停止、重启脚本
1048 0
|
17天前
|
Java Maven
springboot jar包启动提示没有主清单属性
springboot jar包启动提示没有主清单属性
|
17天前
|
Java Linux
SpringBoot项目快速启动停止脚本
SpringBoot项目快速启动停止脚本
20 0
|
10月前
|
Java
如何在SpringBoot启动过程中,进行自定义操作?
如何在SpringBoot启动过程中,进行自定义操作?
42 0
|
7月前
|
Java 应用服务中间件 Android开发
进公司第一步!配置项目环境变量(详细介绍)
进公司第一步!配置项目环境变量(详细介绍)
30 0
|
7月前
|
微服务
IDEA如何配置启动参数
IDEA如何配置启动参数
104 0
|
8月前
|
Java
如何修改springboot项目启动时的默认图标?
如何修改springboot项目启动时的默认图标?
如何修改springboot项目启动时的默认图标?
|
12月前
|
Java 测试技术 数据库连接