当前位置: 首页 > news >正文

5.SpringBoot核心源码-启动类源码分析

目录

  • 概述
  • 技巧
  • spring boot 如何启动应用程序
  • run方法里面核心逻辑 SpringApplicaiton.run(xxx.class,args)
  • 结束

概述

  SpringBoot核心源码-启动类源码分析

技巧

  如何给外部源码加注释,想要在源码中添加自己的注释,会弹出 file is read only,代码只读

  • 方式一:下载框架源码,安装对应的环境,编译,然后即可注释修改保存
  • 方式二:idea插件 private notes ,不影响调试,方便简单

在这里插入图片描述

spring boot 如何启动应用程序

run方法里面核心逻辑 SpringApplicaiton.run(xxx.class,args)

# org.springframework.boot.SpringApplication#SpringApplication(org.springframework.core.io.ResourceLoader, java.lang.Class<?>...)
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {this.resourceLoader = resourceLoader;Assert.notNull(primarySources, "PrimarySources must not be null");# 存储项目启动类this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));// 判断应用是servlet还是reactive应用this.webApplicationType = WebApplicationType.deduceFromClasspath();// 从spring.factories中读取key为Bootstrapthis.bootstrapRegistryInitializers = new ArrayList<>(getSpringFactoriesInstances(BootstrapRegistryInitializer.class));// 设置初始化器		setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));// 设置监听器setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));// 推断并配置项目main函数的主程序启动类this.mainApplicationClass = deduceMainApplicationClass();
}
public ConfigurableApplicationContext run(String... args) {Startup startup = Startup.create();if (this.registerShutdownHook) {SpringApplication.shutdownHook.enableShutdownHookAddition();}DefaultBootstrapContext bootstrapContext = createBootstrapContext();ConfigurableApplicationContext context = null;configureHeadlessProperty();SpringApplicationRunListeners listeners = getRunListeners(args);listeners.starting(bootstrapContext, this.mainApplicationClass);try {ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments);Banner printedBanner = printBanner(environment);context = createApplicationContext();context.setApplicationStartup(this.applicationStartup);prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);refreshContext(context);afterRefresh(context, applicationArguments);startup.started();if (this.logStartupInfo) {new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), startup);}listeners.started(context, startup.timeTakenToStarted());callRunners(context, applicationArguments);}catch (Throwable ex) {throw handleRunFailure(context, ex, listeners);}try {if (context.isRunning()) {listeners.ready(context, startup.ready());}}catch (Throwable ex) {throw handleRunFailure(context, ex, null);}return context;
}

结束

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Redis 7.x 系列【23】哨兵模式
  • 进程信号
  • VINS-Fusion源码逐行解析:除单目+imu模式外的位姿初始化函数initFramePoseByPnP()及其内部函数
  • 科普文:Redis一问一答
  • 特斯拉的选择:.NET技术栈的工业级魅力
  • 第三方配件也能适配苹果了,iOS 18与iPadOS 18将支持快速配对
  • Vue1-Vue核心
  • 斐讯N1盒子刷入Armbian并安装Docker拉取网络下行流量教程
  • docker安装nginx并配置https
  • html5——列表、表格
  • JDK14新特征最全详解
  • Linux rsync文件同步工具
  • 顶顶通呼叫中心中间件-私有化asrproxy配置热词模型
  • 【机器学习】之旅——线性回归
  • React Native
  • 网络传输文件的问题
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • CSS 三角实现
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript标准库系列——Math对象和Date对象(二)
  • java中的hashCode
  • Js基础知识(一) - 变量
  • Linux后台研发超实用命令总结
  • mysql innodb 索引使用指南
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Netty源码解析1-Buffer
  • PHP面试之三:MySQL数据库
  • 阿里云前端周刊 - 第 26 期
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Java数据解析之JSON
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #define
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (k8s中)docker netty OOM问题记录
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (笔记)M1使用hombrew安装qemu
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (三)Honghu Cloud云架构一定时调度平台
  • (学习日记)2024.01.09
  • (一) 初入MySQL 【认识和部署】
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Sql Server 保留几位小数的两种做法
  • (转)大型网站的系统架构
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .bat文件调用java类的main方法
  • .htaccess配置常用技巧
  • .net core 的缓存方案