通常用于需要对应用程序上下文进行一些程序化初始化的web应用程序中。...(对一些配置信息初始化谁先初始化 谁后初始化进行排序) ApplicationListener.class 监听器 由应用程序事件侦听器实现的接口。基于标准java.util。...)将上下文初始化器和classLoader 传进去 SpringFactoriesLoader.loadFactoryNames(type, classLoader)); //创建工厂实例,根据获取的names...将所有事件广播给所有已注册的侦听器,让侦听器忽略它们不感兴趣的事件。侦听器通常会对传入的事件对象执行相应的instanceof检查。 默认情况下,在调用线程中调用所有侦听器。...底层实现了很多事件 如刚启动事件,初始化事件,启动完事件,启动失败事件等等 当一个springboot应用在启动的时候,在某一个时间点,springboot就会产生一个事件通过广播的形式将该事件发送给所有的
除了注册侦听器和初始化程序之外,在运行开始时但在任何处理之前发送 ApplicationStartingEvent 。 2....如果启动时发生异常,则会发送 ApplicationFailedEvent 。 您经常不需要使用应用程序事件,但知道它们存在可能很方便。在内部,Spring Boot使用事件来处理各种任务。...应用程序事件使用Spring Framework的事件发布机制发送。此机制的一部分确保在子上下文中发布给侦听器的事件也会在任何祖先上下文中发 布给侦听器。...因此,如果您的应用程序使用 SpringApplication 实例的层次结构,则侦听器可能会收到相同类型的应用程序事件的多个实例。...为了允许侦听器区分其上下文的事件和后代上下文的事件,它应该请求注入其应用程序上下文,然后将注入的上下文与事件的上下文进行比较。
它在应用程序上下文完全初始化之前触发,此时应用程序刚刚启动,各种初始化任务(如加载配置文件和设置环境)尚不可用。...,就在应用程序上下文完全初始化之前触发。...* 此侦听器可以在主应用程序类中手动注册 * * @param event the event to respond to */ @Override public...,这个实例对应于指定的stepName。...step.end(); } // 这个方法是在Spring Boot应用启动的时候被调用的。它接收一个可配置的启动上下文和一个主应用类(main class)。
* 在此阶段,所有 Bean 都已在上下文中定义,应用程序已准备好处理请求和操作 * * * 我们可以利用 ContextRefreshedEvent 来执行在应用程序上下文完全初始化后需要执行的其他设置或初始化任务...接口来创建一个自定义事件侦听器。...* 此侦听器可以在主应用程序类中手动注册 * * @param event the event to respond to */ @Override public...(); // 初始化当前上下文的生命周期处理器 initLifecycleProcessor(); //首先将刷新操作传播给生命周期处理器 getLifecycleProcessor...null Assert.notNull(event, "Event must not be null"); // 如果事件是ApplicationEvent的实例,则直接使用,否则创建一个新的
我们可以通过创建一个自定义事件监听器来处理ApplicationPreparedEvent,以便在初始化阶段开始之前访问和修改应用程序上下文。...; // 在这里执行需要的操作 } } 然后,在主应用程序类中手动注册这个事件监听器: import org.springframework.boot.SpringApplication...* * 通过监听 ApplicationPreparedEvent ,我们可以在任何实际的 Bean 实例化或依赖关系注入发生之前访问和操作应用程序上下文。...接口来创建一个自定义事件侦听器。...* 此侦听器可以在主应用程序类中手动注册。
事件被调用后,原始异常被重新引发,以便对象的构造仍然引发异常。引发的实际异常和堆栈跟踪应该存在于sys.exc_info()中。 参数: target – 映射的实例。...这意味着当在超类上建立侦听器时,新的子类也将成为这些事件的主题。...调用事件后,原始异常将重新引发,以便对象的构造仍然引发异常。应在sys.exc_info()中提供实际异常和堆栈跟踪引发的异常。 参数: target – 映射的实例。...如果映射类包括继承的子类,则propagate=True标志是重要的,这些子类也会使用此事件侦听器。没有此标志,继承的子类将不使用我们的事件处理程序。...参数: target – 接收事件的对象实例。如果侦听器使用raw=True注册,这将是InstanceState对象。 value – 在调用此事件侦听器之前要返回的值。
在这两种情况下,侦听器类都必须由 Spring 管理。...Spring应用程序上下文中注册,它就会接收事件。...Configuration类之一或@SpringBootApplication类。...ApplicationStartingEvent 除了运行侦听器和初始化程序的注册之外,ApplicationStartingEvent在运行开始时但在任何处理之前都会触发。...建议此时不要修改内部状态,因为所有初始化步骤都将完成。 ApplicationFailedEvent 如果存在异常并且应用程序无法启动,则会触发ApplicationFailedEvent。
Spring提供了很方便的事件的处理机制,包括事件类ApplicationEvent和事件监听类ApplicationListener。...这里,“初始化”意味着加载所有bean,检测并激活后处理器bean,预先实例化单例,并且ApplicationContext对象准备好使用。...意味着onApplicationEvent()方法可以保持类型安全,避免任何向下强制转换的需要。 但请注意,默认情况下,事件侦听器同步接收事件。...这意味着publishEvent()方法将一直阻塞,直到所有侦听器完成对事件的处理。...#blEvent or #a0 (也可以使用 #p0 or #p) 异步侦听器 如果希望特定的侦听器异步处理事件,可以重用常规的@Async支持。
案例定义可以有一个案例重新激活侦听器。可被触发以重新激活历史案例实例,变量上下文等将被重新创建。 添加了一个变量侦听器,以允许BPMN和CMMN模型侦听特定变量的更改,并在模型中处理此触发器。...在CMMN引擎中添加对并行触发的重复信号和通用事件侦听器的支持。 当多实例是自动步骤或自动步骤序列时,添加了异步多实例使用的优化标志。...如果设置,引擎将大大降低资源消耗,并删除乐观锁定异常,通常性能更高。 增加了对事件注册表事件同步处理的支持。 增加了对DMN 1.3版本模型的支持。 添加了对JUEL/后端表达式中方法重载的支持。...从任务侦听器引发的异常不再包装在FlowableException中。 从任务、案例生命周期和计划项生命周期侦听器引发的异常不再包装在FlowableException中。...项目fhadmin.cn 从事件注册表中的事件启动流程/案例实例的方式发生了更改。它不是异步启动流程/案例,而是同步启动。使用此默认值可以正确处理来自同一主题的顺序事件。
ValidationAttribute 充当所有验证特性的基类。 ValidationContext 描述执行验证检查的上下文。...CurrentChangedEventManager 提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 CurrentChanged 事件的侦听器。...CurrentChangingEventManager 提供 WeakEventManager 实现,以便可以使用“弱事件侦听器”模式附加 CurrentChanging 事件的侦听器。...ErrorsChangedEventManager 提供 WeakEventManager 实现,以便可以使用弱事件侦听器模式附加 ErrorsChanged 事件的侦听器。...InheritanceAttribute 指示是否已从基类继承与此特性关联的组件。 此类不能被继承。 InitializationEventAttribute 指定在初始化时引发的事件。
: 1、创建一个SpringApplication实例,根据指定的源primarySources加载实例bean 2、将资源加载器类赋值给实例变量(此处为null) 3、将primarySources...类实例 8、从堆栈中推断出主应用程序类 BootstrapRegistryInitializer:该接口的作用是将一些默认的组件注册到BootstrapRegistry中,这些组件可以帮助Spring...该接口的实现类可以在应用程序上下文创建之前注册到SpringApplication实例中,并在应用程序上下文创建之前执行一些初始化操作,例如覆盖应用程序上下文中的默认bean定义、添加自定义属性源、激活特定的...建议实现Ordered接口,或者使用@Order注解 ApplicationListener:该接口的实现类可以在Spring Boot应用程序中注册到ApplicationContext中,以便在应用程序生命周期内接收和处理特定的应用程序事件...8、创建ApplicationContext 9、设置启动期间的度量记录类 10、准备应用程序上下文 11、刷新应用程序上下文 12、计算启动需要的时间 13、如果需要,记录应用程序启动信息
添加了对案例重新激活的支持,以支持将历史和已完成的案例实例重新激活到正在运行的案例实例。案例定义可以有一个案例重新激活侦听器。可被触发以重新激活历史案例实例,变量上下文等将被重新创建。...添加了一个变量侦听器,以允许BPMN和CMMN模型侦听特定变量的更改,并在模型中处理该触发器。 在CMMN引擎中添加对并行触发的重复信号和通用事件侦听器的支持。...当多实例是自动步骤或自动步骤序列时,添加了异步多实例使用的优化标志。如果设置,引擎将大幅降低资源消耗,并消除乐观锁定异常,通常性能更高。 增加了对事件注册表事件同步处理的支持。...在CMMN引擎中添加了基本的CMMN模型验证。 为CMMN引擎添加了基本的CDI支持。 从任务侦听器抛出的异常不再包装在FlowableException中。...FlowAblePlan和lifecycle中的FlowAbleItem异常不再是从生命周期中抛出的异常。 改进了运行时和历史流程以及案例实例查询(包括变量)的分页。
// 为此上下文初始化事件广播者 initApplicationEventMulticaster(); // 初始化特定上下文子类中的其他特殊bean...onRefresh(); // 检查侦听器bean并注册 registerListeners(); // 实例化所有非懒加载的剩余单例...} } } 从总体来看,该方法描述的初始化过程大概分为三步: 上下文的初始化; BeanFactory 初始化; 事件,Bean及其他配置的初始化; 笔者将基于 spring 源码 5.2...相关文章: 深入理解Spring容器初始化(一):上下文的初始化; 深入理解Spring容器初始化(二):BeanFactory的初始化; 深入理解Spring容器初始化(三):事件及其他配置的初始化;...IllegalStateException 异常; 直接创建一个新工厂,然后替换上下文中原有的工厂; 1、刷新工厂 可重复刷新的上下文 不允许重复刷新的容器包括 GenericApplicationContext
一周之中可能会插入其他内容的博文,可能和springboot启动源码有关,也可能和启动源码无关。 路漫漫其修远兮,吾将上下而求索! ...:当事件发生时,负责对事件的处理 事件环境:整个事件所处的上下文,对整个事件提供支持 SpringApplicationRunListener run方法的源代码如下 /** * Run...,我们先来看看ConfigurableApplicationContext,从名字来看就是:合适的应用上下文,会根据class路径下的类初始化合适的应用上下文,比如是普通的spring应用(非web应用...这次就是从SpringFactoriesLoader的cache中取SpringApplicationRunListener类型的类(全限定名),然后实例化后返回。...ApplicationListeners集合,非匹配的侦听器会被提前排除;允许根据缓存的匹配结果来返回。
SpringBoot运行流程源码分析 上一章中我们分析了 SpringApplication 类实例化的源代码,在此过程中完成了基本配置文件的加载和实例化。....创建并初始化容器。 监听器发送通知。 当然,除了核心操作,run 方法运行过程中还涉及启动时长统计、异常报告、启动日志、异常处理等辅助操作。...在构造方法中初始化了该类的 3 个成员变量。 -application :类 型为 SpringApplication ,是当前运行的 SpringApplication 实例。...:第一,遍历 application 的所有监听器实现类,如果该实现类还实现了 ApplicationContextAware 接口,则将上下文信息设置到该监听器内;第二,将 application 中的监听器实现类全部添加到上下文中...这是因为只有到了 contextL oaded 方法之后,上下文才算初始化完成,才可通过它的 publishEvent 方法来进行事件的发布。
onRefresh(); // 检查侦听器bean并注册 registerListeners(); // 实例化所有非懒加载的剩余单例...本文是其中的第三篇文章,将介绍上下文中事件,Bean及其他配置的初始化。...相关文章: 深入理解Spring容器初始化(一):上下文的初始化; 深入理解Spring容器初始化(二):BeanFactory的初始化; 深入理解Spring容器初始化(三):事件及其他配置的初始化;...中注册一个SimpleApplicationEventMulticaster 实例作为当前上下文的事件广播器。...这一步代码不动,实际上逻辑也很简单: 向事件广播器注册已经被注册的上下文中的监听器; 向事件广播器注册还没有被实例化的监听器的 BeanName; 发布一些早期事件; protected void registerListeners
,内置标准的事件有 5 种: 当 Spring 容器处于初始化或者刷新阶段时就会触发,事实是ApplicationContext#refresh()方法被调用时,此时容器已经初始化完毕。...实例。...,可能会由于需求想要指定侦听器的执行顺序,这一点 Spring 也为我们考虑到了,只要使用 @Order注解声明监听类或者监听方法即可,根据 @Order 的 value 大小来确定执行顺序,越小越优先执行...首先就要介绍 Spring 中事件机制的三类对象: Event :所需要触发的具体事件对象,通常扩展 ApplicationEvent 实现。...在应用资源文件夹新建文件 META-INF/spring.factories,并将 org.springframework.context.ApplicationListener 作为键,指定需要注册的侦听器类
本文介绍的 Chrome 开发者工具基于 Chrome 65版本,如果你的 Chrome 开发者工具没有下文提到的那些内容,请检查下 Chrome 的版本 简介 Chrome 开发者工具是一套内置于 Google...事件侦听器 ?...启用 Ancestors 复选框时查看祖先实体事件侦听器,即除了当前选定节点的事件侦听器外,还会显示其祖先实体的事件侦听器 启用 Framework listeners 复选框时查看框架侦听器,DevTools...事件监听器断点 当想要暂停事件侦听器代码时,使用事件侦听器断点 设置事件监听器断点: 点击 Sources 选项卡。 展开 “Event Listener Breakpoints” 窗格。...异常断点 当您想暂停引发捕获或未捕获异常的代码行时,使用异常断点 设置异常断点: 点击 Sources 选项卡。 点击暂停 ? ,启用后变成蓝色。
tcpGrpcAccessLogFromTelemetry:用于构建基于gRPC的TCP访问日志,用于将TCP层的遥测事件发送到远程服务器。...httpGrpcAccessLogFromTelemetry:用于构建基于gRPC的HTTP访问日志,用于将HTTP层的遥测事件发送到远程服务器。...openTelemetryLog:用于创建OpenTelemetry access log实例,它是一种将遥测事件发送到OpenTelemetry后端的抽象。...这些变量和函数的目的是为了配置和处理遥测日志,包括记录访问日志、构建各种类型的访问日志配置,以及将遥测事件发送到远程服务器或本地文件等。...InitContext:初始化上下文。 createNewContext:创建新的上下文。 updateContext:更新上下文。 initServiceRegistry:初始化服务注册表。
领取专属 10元无门槛券
手把手带您无忧上云