接下来就是深入探究第二个了 SpringApplication.run() 。 换个姿势 上面的姿势太简单了,只一行代码就完事了。 (Springboot2Application.class, args); SpringApplication application = new SpringApplication(Springboot2Application.class SpringApplication 初始化 SpringApplication.run() 的实现才是我们要深入探究的主角,该方法代码如下: //静态方法,可用于使用默认配置运行 SpringApplication ,创建 SpringApplication 对象,并调用该对象的 run 方法。 public SpringApplication(Class<?
SpringApplication Explain The SpringApplication class provides a convenient way to bootstrap a Spring In many situations, you can delegate to the static SpringApplication.run method, as shown in the following (SpringApplication类提供了一种便利的方式以便引导Spring应用从#main启动,大多数情况下,可以通过静态方法SpringApplication#run代理启动) How TO Use SpringApplication @EnableAutoConfiguration public class MyApplication { // ... static void main(String[] args) { SpringApplication app = new SpringApplication(MySpringConfiguration.class
从Spring Boot应用进程来看,整体的生命周期大体上总结如下: SpringApplication初始化阶段 SpringApplication运行阶段 SpringApplication结束阶段 SpringApplication应用退出 SpringApplication初始化阶段属于运行前的准备阶段,大多数Spring Boot应用直接或间接地使用SpringApplication API 1、SpringApplication构造阶段 SpringApplication构造阶段在其构造器中完成,在日常开发中,很少直接与SpringApplication构造器打交道,而是调用其静态方法run 的构造过程 已知SpringApplication.run()方法的执行会伴随SpringApplication对象的构造,其调用的构造器为: public SpringApplication(Class 2.1、自定义SpringApplication 自定义SpringApplication一共有三种方式: 调整SpringApplication设置 增加SpringApplication配置源 调整
日常打war包下载到本地进行open使用时,我们在启动项目时可能会遇到 ERROR SpringApplication Application run failed org.springframework.beans.factory.BeanDefinitionStoreException
文章目录 通过SpringApplication开始引导启动 SpringApplication类是用来执行Spring框架启动的引导类。 有两种方式可以进行启动引导: 通过静态方法 SpringApplication.run启动。 先创建 SpringApplication实例,在调用的实例方法 run进行启动。 无论是以上哪种方式,最终都是通过创建SpringApplication实例,在调用run()启动。 new SpringApplication——创建引导启动的实例 在创建SpringApplication实例的时候,会根据用户输入和工程环境做一些基础配置,供之后引导启动中使用。 SpringApplicationRunListener.start()——获取监听器,启动监听 监听器可以用来监听SpringApplication启动过程中的各个阶段。
run方法逻辑 在上一篇文章中,我们看到SpringApplication的静态方法最终是去构造了一个SpringApplication实例对象,并调用了SpringApplication的成员方法 >[] primarySources, String[] args) { return new SpringApplication(primarySources).run(args); } 本文将梳理一下 ApplicationContext的refresh之后 7)发布ApplicationContext的refresh完毕的事件 8)触发runner 9)最后发布refresh完毕、runner执行完毕的事件 run方法描述了SpringApplication 总结 我们忽略各种细节以后就会发现,SpringApplication的run方法主要就是为了构建出一个ApplicationContext,后续文章也将围绕着构建ApplicationContext相关的内容展开
SpringApplication的初始化 之前已经分析了引导类上的@SpringBootApplication注解, 接下来继续分析main方法,只调用了一句SpringApplication.run 可以看到,这里初始化了SpringApplication并且执行了它的run方法。 从SpringApplication的构造方法开始看,SpringApplication的构造方法主要做了四件事: 配置源 推断web应用类型 应用上下文初始器和应用事件监听 推导引用主类 源码如下: 就是构造方法第二个参数的primarySources 通过XML的方式配置: SpringApplication springApplication = new SpringApplication(); springApplication.setSources(); springApplication.run(args); 其实就是通过setSources方法,添加参数来配置,参数可以是类名,包名以及
本篇开始就将从 Spring Boot 的启动类 SpringApplication 上入手,带领大家了解 Spring Boot 启动过程中所涉及到的源码和知识点。主要内容1. springApplication = new SpringApplication(DemoApplication.class); // 这里可以调用 SpringApplication 提供的 setXX 或 addXX 方法来定制化设置 springApplication.run(args); }}2. SpringApplication 的实例化上面已经看到我们在实例化 SpringApplication 了,废话不多说,直接翻看其源码【Spring Boot 2.7.9】: public SpringApplication 最后,将上述创建的 Class 对象赋值给 SpringApplication 的成员变量 mainApplicationClass。
1、SpringApplication正常结束 Spring Boot2.0为SpringApplication正常结束新引入了SpringApplicationRunListener的生命周期,即running new ApplicationReadyEvent(this.application, this.args, context)); } 不难看出当ApplicationReadyEvent事件触发后,SpringApplication 2、SpringApplication异常结束 SpringApplication异常结束就宣告Spring Boot应用运行失败。 与正常流程类似,异常流程同样作为SpringApplication生命周期的一个环节,将在SpringApplicationRunListener#failed(ConfigurableApplicationContext 在Spring Boot2.0中新增了一个SpringBootExceptionReporter接口,用于支持SpringApplication启动错误的自定义报告的回调接口。
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 前言 在之前的文章中,我们深入研究了Tomcat、Spring、以及SpringMVC 本篇文章将聚焦于SpringApplication的构造方法。基于 2.7.18版本,这也是SpringBoot3发布前的最后一个版本。 SpringApplication.run()方法是启动SpringBoot应用的核心入口。我们从这个方法开始,逐步深入。 >[] primarySources, String[] args) { return new SpringApplication(primarySources).run(args); } 根据类路径来推断 > mainApplicationClass; public SpringApplication(Class<?
4、配置你的SpringApplication 咱们一般启动类都是直接调用SpringApplication.run就行了。 args) { SpringApplication app = new SpringApplication(MySpringConfiguration.class); app.setBannerMode (Banner.Mode.OFF); app.run(args); } 当然还有很多配置属性,你也可以使用application.yml来配置SpringApplication 的属性。 最好使用SpringApplication.addListeners(…) 和 SpringApplicationBuilder.listeners(…) 来注册监听器。 11、应用退出( Application Exit) 每个SpringApplication 都会像JVM注册一个关闭钩子(shutdown hook ),来确保能够正常的退出。
在上篇文章:SpringBoot源码解析:创建SpringApplication对象实例中,我们详细描述了SpringApplication对象实例的创建过程,本篇文章继续看run方法的执行逻辑吧 public 在系统可能缺少显示设备、键盘或鼠标这些外设的情况下可以使用该模式 个人理解为是一些图形相关的组件能否使用的开关,欢迎各位大佬指正 接着遍历所有构造SpringApplication实例时加载的SpringApplicationRunListener Bindable.ofInstance(this)); } catch (Exception ex) { throw new IllegalStateException("Cannot bind to SpringApplication
在上篇文章中SpringApplication到底run了什么(上)中,我们分析了下面这个run方法的前半部分,本篇文章继续开工 public ConfigurableApplicationContext
上篇文章SpringBoot自动装配原理解析中,我们分析了SpringBoot的自动装配原理以及@SpringBootApplication注解的原理,本篇文章则继续基于上篇文章中的main方法来分析SpringApplication SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run >[] primarySources, String[] args) { return new SpringApplication(primarySources).run(args); } public SpringApplication(Class<? >... primarySources) { this(null, primarySources); } public SpringApplication(ResourceLoader resourceLoader
SpringApplication 定义:Spring应用引导类,提供便利的自定义行为方法 场景:嵌入式Web应用和非Web应用 准备阶段 配置:Spring Bean来源 Java配置Class:Spring WebApplicationType.NONE; } } return WebApplicationType.SERVLET; } 可以在引导类中指定引导的具体类型 /** * {@link SpringApplication springApplication = new SpringApplication(); springApplication.setSources(set); // 默认为 Servlet类型,此处对它进行强制关闭,变成普通类型--主线程会中断[非web容器], web容器主线程会阻塞等待请求 springApplication.setWebApplicationType (WebApplicationType.NONE); ConfigurableApplicationContext context = springApplication.run(args
{ public static void main(String[] args) { SpringApplication.run(SpringTestApplication.class, args ); } } SpringTestApplication类执行main方法,main方法调用SpringApplication的run方法。 run方法干了两件事: 创建SpringApplication对象 利用创建好的SpringApplication对象调用run方法 创建SpringApplication对象 在执行SpringApplication 的run方法时首先会创建一个SpringApplication类的对象,利用构造方法创建SpringApplication对象时会调用initialize方法。 一共做了两件事 创建SpringApplication对象;在对象初始化时保存事件监听器,容器初始化类以及判断是否为web应用,保存包含main方法的主配置类。
《Spring Boot 源码学习系列》引言前面的博文,Huazie 带大家从 Spring Boot 的启动类 SpringApplication 上入手,了解了 SpringApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication (DemoApplication.class); springApplication.setBannerMode(Banner.Mode.OFF); springApplication.run { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication (args); }}1.3 设置应用程序主入口类在笔者的《初识 SpringApplication》 中,2.6 小节介绍了 SpringApplication 实例化时,会自动推断应用入口类,最终会被赋值给
那么代码中只有⼀个@SpringBootApplication 注解 和 调⽤了SpringApplication#run ⽅法.那么我们先来解析SpringApplication的run⽅法. 解析 ⾸先调⽤了org.springframework.boot.SpringApplication#run(Object, String...) (sources).run(args); } 可以发现 ⾸先初始化了SpringApplication,然后调⽤其实例⽅法:run. 2. 在 SpringApplication 的构造器中,调⽤了 initialize ⽅法. public SpringApplication(Object... sources) { initialize 如果sources⻓度⼤于0的话,加⼊到SpringApplication的sources中,该sources是⼀个LinkedHashSet. 2.
本文主要说明在调用 SpringApplication.run(…) 时,如何实例化 ConfigurableApplicationContext,也即是如何选择 ConfigurableApplicationContext SpringBootApplication public class ClientInnerApplication { public static void main(String[] args) { SpringApplication.run (ClientInnerApplication.class, args); } } SpringApplication.run 会返回一个 ConfigurableApplicationContext 通过以下源码: SpringApplication.createApplicationContext() protected ConfigurableApplicationContext createApplicationContext 通过以下源码: SpringApplication public SpringApplication(ResourceLoader resourceLoader, Class<?
一、SpringApplication 是什么? Spring 应用的启动类。 二、SpringApplication 执行了什么? 三、bean 加载源 SpringApplication 有诸多 bean 加载源: AnnotatedBeanDefinitionReader 顾名思义,注解 bean 定义读取。 四、SpringApplication 创建 public SpringApplication(ResourceLoader resourceLoader, Class<? 6、启动参数处理 ApplicationArguments:提供 SpringApplication 启动参数访问。 bindToSpringApplication(environment) 将 environment 绑定到 SpringApplication。 Binder:用于对象绑定的容器。