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

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

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

相关文章
|
28天前
|
调度 开发者 异构计算
冠军10万美金!AMD 2025 分布式推理算子优化挑战赛来了
冠军10万美金!AMD 2025 分布式推理算子优化挑战赛来了
213 13
|
8月前
|
存储 人工智能 安全
有奖体验 AI 模特换装,解锁电商视觉新体验
在电商中,制作精美的商品展示图成本高且流程复杂。AI 换装技术允许商家快速更换模特的服装或配件,无需重新拍摄,大大缩短准备时间。这项技术减少了对专业摄影师和后期团队的依赖,使中小商家也能轻松产出高质量的商品图片,灵活响应市场变化,有效降低成本,提升竞争力。本方案利用函数计算 FC 构建 Web 服务,采用百炼视觉模型 qwen-vl-max-latest、aitryon、aitryon-refiner、shoemodel-v1 来分别实现 AI 人物主体信息提取、模特试衣、试衣精修、模特换鞋。
|
7月前
|
缓存 监控 搜索推荐
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
|
10月前
|
数据采集 人工智能 运维
AI辅助的系统监控和预测:新时代的运维利器
AI辅助的系统监控和预测:新时代的运维利器
372 9
|
算法 安全 量子技术
量子计算与金融风险管理:提升市场预测能力
【10月更文挑战第8天】量子计算作为一种前沿技术,正在逐步改变金融风险管理的格局。通过利用其独特的计算能力和优化算法,量子计算可以显著提高市场预测的准确性和及时性,为金融机构提供更精准的风险管理工具。尽管目前仍面临一些挑战和限制,但随着技术的不断进步和完善,相信量子计算将在未来的金融风险管理领域发挥更加重要的作用。
|
存储 SQL 分布式计算
当NameNode宕机时的应急响应与恢复策略
【8月更文挑战第31天】
441 0
|
算法 调度 Python
探索操作系统核心:一个简单的进程调度模拟器
【8月更文挑战第31天】在这篇文章中,我们将通过构建一个简单的进程调度模拟器来揭开操作系统调度算法的神秘面纱。通过模拟FIFO(先进先出)、RR(轮转)和优先级调度算法,我们将理解它们如何影响系统性能。文章将使用Python代码示例来展示这些概念,旨在让读者通过动手实践获得深刻的认识,而不仅仅是理论学习。
|
API 数据库 开发者
掌握数据完整性的关键:全面解析Entity Framework Core中的事务管理策略及其应用
【8月更文挑战第31天】在数据库操作中,确保数据完整性至关重要。Entity Framework Core(EF Core)作为一款强大的ORM工具,提供了丰富的API支持事务管理,帮助开发者实现数据的一致性和完整性。
168 0