Spring原理解析 之扩展原理-ApplicationListener

SpringBoot集成kafka全面实战 本文是SpringBoot+Kafka的实战讲解,如果对kafka的架构原理还不了解的读者,建议先看一下《大白话kafka架构原理》、《秒懂kafka HA(高可用)》两篇文章。 一、生产者实践 普通生产者 带回调的生产者 自定义分区器 kafka事务提交 二、消费者实践 简单消费 指定topic、partition、offset消费 ... 阅读详情

简介

 * 3、ApplicationListener:监听容器中发布的事件。事件驱动模型开发;
 * 	  public interface ApplicationListener<E extends ApplicationEvent>
 * 		监听 ApplicationEvent 及其下面的子事件;
 * 
 * 	 步骤:
 * 		1)、写一个监听器(ApplicationListener实现类)来监听某个事件(ApplicationEvent及其子类)
 * 			@EventListener;
 * 			原理:使用EventListenerMethodProcessor处理器来解析方法上的@EventListener;
 * 
 * 		2)、把监听器加入到容器;
 * 		3)、只要容器中有相关事件的发布,我们就能监听到这个事件;
 * 				ContextRefreshedEvent:容器刷新完成(所有bean都完全创建)会发布这个事件;
 * 				ContextClosedEvent:关闭容器会发布这个事件;
 * 		4)、发布一个事件:
 * 				applicationContext.publishEvent();

案例

创建一个自定义事件监听器类。

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {

    //当容器中发布此事件以后,方法触发
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        System.out.println("收到事件:"+event);
    }
}

测试类,并发布一个事件。

@Test
public void test(){
    AnnotationConfigApplicationContext applicationContext  = new AnnotationConfigApplicationContext(SpringConfig.class);
    //发布事件;
    applicationContext.publishEvent(new ApplicationEvent(new String("我发布的事件")) {
    });
    applicationContext.close();
}

输出结果

收到事件:org.springframework.context.event.ContextRefreshedEvent[source=org.springframework.context.annotation.AnnotationConfigApplicationContext@2db0f6b2: startup date [Sun Sep 15 16:28:36 CST 2019]; root of context hierarchy]
收到事件:com.demo.IOCTest$1[source=我发布的事件]
收到事件:org.springframework.context.event.ContextClosedEvent[source=org.springframework.context.annotation.AnnotationConfigApplicationContext@2db0f6b2: startup date [Sun Sep 15 16:28:36 CST 2019]; root of context hierarchy]

ApplicationListener简介

依赖于Spring框架,在Spring启动时调用。在普通Spring应用中一般监听ContextRefreshedEvent事件。

ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理。
如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被触发。这种事件机制都必须需要程序显示的触发。
其中spring有一些内置的事件,当完成某种操作时会发出某些事件动作。比如监听ContextRefreshedEvent事件,当所有的bean都初始化完成并被成功装载后会触发该事件,实现ApplicationListener<ContextRefreshedEvent>接口可以收到监听动作,然后可以写自己的逻辑。

同样事件可以自定义、监听也可以自定义,完全根据自己的业务逻辑来处理。

需要注意的是,在普通Spring环境中,基于ApplicationListener的监听器的onApplicationEvent方法可能会被执行多次,所以需要添加以下判断:

public void onApplicationEvent(ContextRefreshedEvent event) {
    //root application context 没有parent
    if(event.getApplicationContext().getParent() == null){
    
    }
}

Spring的事件

ApplicationEvent:事件本身 事件接口。
ApplicationListener:事件监听者 事件监听器接口,所有的监听器都实现该接口。
ApplicationEventPublisher:事件发布者 事件发布接口,ApplicationContext实现了该接口。
ApplicationEventMulticaster: Spring事件机制中的事件广播器,执行事件。

执行流程:
当一个事件源产生事件时,它通过事件发布器ApplicationEventPublisher发布事件,然后事件广播器ApplicationEventMulticaster会去事件注册表ApplicationContext中找到事件监听器ApplicationListnener,并且逐个执行监听器的onApplicationEvent方法,从而完成事件监听器的逻辑。

Spring默认启动事件

  • ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。
  • ContextStartedEvent:当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。
  • ContextStoppedEvent:当使用 ConfigurableApplicationContext 接口中的 stop() 停止 ApplicationContext 时,发布这个事件。你可以在接受到这个事件后做必要的清理的工作。
  • ContextClosedEvent:当使用 ConfigurableApplicationContext 接口中的 close() 方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启。
  • RequestHandledEvent:这是一个 web-specific 事件,告诉所有 bean HTTP 请求已经被服务。只能应用于使用DispatcherServlet的Web应用。在使用Spring作为前端的MVC控制器时,当Spring处理用户请求结束后,系统会自动触发该事件。

SpringBoot默认启动事件

  • ApplicationStartingEvent: SpringBoot启动开始的时候执行的事件
  • ApplicationEnvironmentPreparedEvent: SpringBoot对应Enviroment已经准备完毕,但此时上下文context还没有创建。在该监听中获取到ConfigurableEnvironment后可以对配置信息做操作,例如:修改默认的配置信息,增加额外的配置信息等等。
  • ApplicationPreparedEvent: SpringBoot上下文context创建完成,但此时Spring中的bean是没有完全加载完成的。在获取完上下文后,可以将上下文传递出去做一些额外的操作。值得注意的是:在该监听器中是无法获取自定义bean并进行操作的。
  • ApplicationReadyEvent: SpringBoot加载完成时候执行的事件。
  • ApplicationFailedEvent: SpringBoot启动异常时执行事件。

Spring环境下的实现事件发布监听的方法

自定义事件,继承自ApplicationEvent抽象类。

@Getter
@Setter
public class MyApplicationEvent extends ApplicationEvent {

    private String msg;

    public MyApplicationEvent(Object source, String msg) {
        super(source);
        this.msg = msg;
    }

}

自定义监听事件的发布:

@Resource
private ApplicationContext applicationContext;
applicationContext.publishEvent(new MyApplicationEvent("测试事件", msg));

SpringBoot进行事件监听有四种方式:
1、写代码向ApplicationContext中添加监听器\

// 实现ApplicationListener接口
public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> {

    @Override
    public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
        System.out.println("监听到事件源:" + myApplicationEvent);
    }
}

// 装载监听
@SpringBootApplication
public class MqProviderApplication {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MqProviderApplication.class);
        app.addListeners(new MyApplicationListener());//加入自定义的监听类
        app.run(args);
    }

}

2、使用Component注解将监听器装载入Spring容器

@Component
public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> {

    @Override
    public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
        System.out.println("监听到事件源:" + myApplicationEvent);
    }
}

3、在application.yml中配置监听器

public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> {
    @Override
    public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
        System.out.println("监听到事件源:" + myApplicationEvent);
    }
}
context:
  listener:
    classes: com.provider.listener.MyApplicationListener

4、通过@EventListener注解实现事件监听

import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationListener {

    @EventListener(classes = MyApplicationEvent.class)
    public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
        System.out.println("监听到事件源:" + myApplicationEvent);
    }
}

参考:
理解 Spring ApplicationListener
Spring监听器之ApplicationListener原理及源码解析及实例

Spring Boot 生命周期与核心扩展点全解析(含实操案例) / 1. 实现扩展类@Override// 往环境中添加自定义属性// 将自定义属性添加到环境中(优先级低于配置文件)System.out.println("ApplicationContextInitializer:已添加自定义系统属性");// 2. 注册扩展类(两种方式任选其一)// 方式1:在启动类中手动注册// 添加自定义Initializer// 方式2:通过META-INF/spring.factories配置(推荐,解耦) 阅读详情

相关推荐

Spring Event机制深度解析:从核心原理到生产实践

在Spring框架中,事件驱动模型是一种实现组件间松耦合通信的核心设计模式。其基本原理基于观察者模式,通过发布者(Publisher)、事件(Event)和监听器(Listener)三个核心角色协同工作,发布者发布事件,而监听器订阅并处理感兴趣的事件,从而实现业务逻辑的解耦。这一机制的技术价值在于它能显著提升代码的可维护性和可扩展性,并支持异步处理以优化系统响应性能。在实际应用场景中,它被广泛用于用户注册后的多步骤处理(如发送邮件、初始化资料)、事务成功后的后续操作(如记录日志、发送通知)以及构建事件驱动架

weixin_34178244的博客 272

Java8新特性及实战视频教程完整版

Java8新特性及实战视频教程完整版Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda 表达式可以使代码变的更加简洁紧凑。Java8实战视频-01让方法参数具备行为能力Java8实战视频-02Lambda表达式初探Java8实战视频-03Lambda语法精讲Java8实战视频-04Lambda使用深入解析Java8实战视频-05Lambda方法推导详细解析-上.wmvJava8实战视频-06Lambda方法推导详细解析-下Java8实战视频-07Stream入门及Stream在JVM中的线程表现Java8实战视频-08Stream知识点总结Stream源码阅读Java8实战视频-09如何创建Stream上集Java8实战视频-10如何创建Stream下集.wmvJava8实战视频-11Stream之filter,distinct,skip,limit,map,flatmap详细介绍Java8实战视频-12Stream之Find,Match,Reduce详细介绍Java8实战视频-13NumericStream的详细介绍以及和Stream之间的相互转换Java8实战视频-14Stream综合练习,熟练掌握API的用法Java8实战视频-15在Optional出现之前经常遇到的空指针异常.wmvJava8实战视频-16Optional的介绍以及API的详解Java8实战视频-17Optional之flatMap,综合练习,Optional源码剖析Java8实战视频-18初识Collector体会Collector的强大Java8实战视频-19Collector使用方法深入详细介绍-01Java8实战视频-20Collector使用方法深入详细介绍-02Java8实战视频-21Collector使用方法深入详细介绍-03.wmvJava8实战视频-22Collector使用方法深入详细介绍-04Java8实战视频-23Collector原理讲解,JDK自带Collector源码深度剖析Java8实战视频-24自定义Collector,结合Stream的使用详细介绍Java8实战视频-25Parallel Stream编程体验,充分利用多核机器加快计算速度Java8实战视频-26Fork Join框架实例深入讲解Java8实战视频-27Spliterator接口源码剖析以及自定义Spliterator实现一个Stream.wmvJava8实战视频-28Default方法的介绍和简单的例子Java8实战视频-29Default方法解决多重继承冲突的三大原则详细介绍Java8实战视频-30多线程Future设计模式原理详细介绍,并且实现一个Future程序Java8实战视频-31JDK自带Future,Callable,ExecutorService介绍Java8实战视频-32实现一个异步基于事件回调的Future程序.wmvJava8实战视频-33CompletableFuture用法入门介绍Java8实战视频-34CompletableFuture之supplyAsync详细介绍Java8实战视频-35CompletableFuture流水线工作,join多个异步任务详细讲解Java8实战视频-36CompletableFuture常用API的重点详解-上Java8实战视频-37CompletableFuture常用API的重点详解-下Java8实战视频-38JDK老DateAPI存在的问题,新的DateAPI之LocalDate用法及其介绍.wmvJava8实战视频-39New Date API之LocalTime,LocalDateTime,Instant,Duration,Period详细介绍Java8实战视频-40New Date API之format和parse介绍

高功率半导体叠阵激光快慢轴准直优化技术解析

本文深入解析了高功率半导体叠阵激光快慢轴准直优化技术。针对其光束发散特性,文章系统阐述了从光源建模、光学仿真到透镜选型与参数匹配的完整工程流程,并强调了光束整形对于提升加工精度与效率的核心作用。通过优化快慢轴准直,可将原始散光转变为能量集中、均匀性好的高质量光束,为后续工业应用奠定基础。

php55的博客 713

IDEA中使用org.springframework.boot.autoconfigure.AutoConfiguration.imports没有被识别

在SpringBoot2.7.x版本之后,慢慢不支持META-INF/spring.factories文件了,需要导入的自动配置类可以放在/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中,可以看下spring-boot-autoconfigure-2.7.7.jar下的这个文件。所以正确的操作是先创建META-INF目录,然后在其下面创建spring目录,然后把这个文件放进去即可。

Zhangsama1的博客 1万+

26 硬件工程师笔面试高频考点真题解析——CAN总线

CAN总线是一种差分多主串行半双工总线,采用非破坏性位仲裁机制和五层硬件错误检测(位错误、填充错误、CRC校验、格式错误、应答错误),具有高可靠性和故障容错能力。关键设计包括两端120Ω终端电阻匹配阻抗、手拉手总线拓扑、显性/隐性电平优先级仲裁。常见故障分析指出多节点异常多因终端电阻错配/漏装、星型布线违规或总线过载;高速通讯失败常由阻抗失配或线缆过长导致信号反射。相比RS485,CAN支持多主架构、硬件自动仲裁和节点故障隔离,更适用于汽车、工业等高可靠场景。

XU157303764的博客 547

量子磁场测量技术在生物磁场成像领域的应用现状与产业趋势

首先对量子磁场测量技术的发展进行了简述,然后介绍了量子磁场测量技术在生物磁场成像领域的应用,最后分析了量子磁场测量技术的两大重要应用方向(心磁图仪和脑磁图仪)及其产业现状和未来发展趋势。美国普林斯顿大学在《自然》上公布了目前人类磁场测量灵敏度最高的基于量子磁场测量技术的零场原子磁力计。拥有巨大的发展潜力及庞大的市场空间。因此其数千万元的高昂售价及每年数百万元的超导维护成本限制了超导式心磁图仪的发展和临床应用。而基于超导式脑磁图仪的癫痫、阿尔兹海默症、抑郁症等脑疾病患者的临床研究也取得丰富的研究成果。

罗伯特技术屋 1529

Java定时任务之--schedule与scheduleAtFixedRate异同

schedule 执行任务超时,第N个任务会在 N-1个任务执行完成后,不做period等待,立即启动执行;N任务执行未超时,N+1个任务会在N任务执行完成后,等待period,再执行。

u011368399的专栏 3892

足球赛事数据API:开发者生存指南(附真实踩坑记录)

作为一个既爱看球又爱写代码的老宅男,我这些年用过的足球API比看过的比赛还多。从最初被各种API文档折磨到怀疑人生,到现在能闭着眼睛调接口,中间的血泪史够写本书了。今天就把这些经验(和教训)分享给各位同好,特别是那些正在为"老板要做个足球App"而秃头的同行们。文档清晰免费层可用响应格式规范API-Sports免费额度大方支持GraphQL有中文文档(难得!Sportmonks数据全面有Webhook支持按需付费。

Happy0970的博客 2191

PowerJob容器的前世,容器是如何产生,如何上传到Server上去的

这不仅仅是一篇PowerJob源码分析的文章,还有很多的java基础知识,在实践中学习效果更好,感兴趣就留下来交流一下吧。

zcrazy的博客 1104

从零开始VCS+Verdi 安装过程

从零开始VCS+Verdi 安装及破解过程 主要参考:VCS+Verdi 安装及破解过程(CentOS7)-----FPGA开发 1. 安装文件结构 –vcs-mx_vL-2016.06 –verdi_vL-2016.06-1 –scl_v11.9 #此程序统一管理license等破解文件 –SynopsysInstaller.rar #此程序用于安装以上3个程序 –sc...

Ztrans的博客 2万+

Opencv项目实战:20 单手识别数字0到5

今天要做的是单手识别数字0到5,通过在窗口展示,实时的展示相应的图片以及文字。在这里,我提供一下识别更多数字的方法(0-10)。首先最简便的是双手识别,完全不用更改代码,把图片处理好就行了;其次,就是按照最上面的那张图片,参数figureup是一个长度为5的列表[0,0,0,0,0],你可以参照着手势将其打印出来,然后将其用if条件判断。当然,在我们这边最常见的还是华北手势表示数字,大家按照自己的习惯来就行。

m0_62919535的博客 2877

深入理解Spring源码之IOC 扩展原理BeanFactoryPostProcessor和事件监听ApplicationListener

2.BeanFactoryPostProcessor 一个好的框架必备的特性至少得有开闭原则,可扩展性BeanFactoryPostProcessor也是Spring可扩展性的一个体现,我们读一下这个接口的源码 public interface BeanFactoryPostProcessor { /** * Modify the application context'...

数据与算法架构提升之路专栏 832

YOLOv8人工智能与深度学习——强化学习

本文介绍了将YOLOv8目标检测模型与强化学习结合的方法。主要应用包括自适应目标检测(动态调整检测参数)、主动学习(智能选择标注样本)和多目标跟踪优化。实现方案采用深度Q网络策略,通过定义状态表示、动作空间和奖励函数,使检测系统能根据环境反馈优化性能。该方法具有自适应优化、资源高效、持续改进等优势,能构建更智能的计算机视觉系统。文章详细说明了强化学习环境的构建、策略网络的实现以及训练过程,并提供了代码示例。

u010117029的博客 259

扩展原理——ApplicationListener

一、ApplicationListener应用监听器 通过监听容器中发布的事件,事件驱动模型开发。监听ApplicationEvent及其下面的子事件 当容器中发布此事件之后,onApplicationEvent()方法会被触发 二、基于事件开发的步骤 写一个监听器实现ApplicationListener接口来监听某个事件,并把监听器加入到容器中,只要容器中有相关事件的发布,就可以监听到这个事件 调用publishEvent()方法发布事件 测试 三、监听器原理 ContextRefreshedE

qq_39794062的博客 345

文章ACCEPT之后填写内容教程-Springer-Verlag即施普林格

1. 确认corresponding author通讯作者机构是否正确(最好细分到系,如搜不到系只填大学也可)这些信息因为在投稿的时候都填过,所以一般都没问题,可确认并继续。2. Co-Author: 这篇文章有没有其他作者,如果有就选yes,并确认投稿时所填的作者姓名和机构是否正确。这个也是如果前期都填对了就不用修改。3. Research funders: 问文章的研究有没有资助,没有就选no,有就选yes,并填写机构名称和grant/contact numbers。

ZhangJiqun&191cm&85kg 4783

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

42、扩展原理-ApplicationListener原理

42、扩展原理-ApplicationListener原理 有三个事件 ContextRefreshedEvent、Test_Ext$1[source=我发布了一个事件]、ContextClosedEvent ContextRefreshedEvent事件: 容器创建对象:refresh(); finishRefresh();容器刷新完成会发布ContextRefreshedEv...

144

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【spring】Spring事件监听器ApplicationListener的使用与源码分析

Override@AutowiredapplicationEventPublisher.publishEvent(new CustomEvent("自定义事件"));applicationEventPublisher.publishEvent(new CustomEvent("自定义事件"));@Override。

2509_93961492的博客 465

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

spring boot 之监听器ApplicationListener

监听器ApplicationListener 就是spring的监听器,能够用来监听事件,典型的观察者模式。ApplicationListener和ContextRefreshedEvent一般都是成对出现的在IOC容器的启动过程中,当所有的bean都已经处理完成之后,spring ioc容器会有一个发布事件的动作。从AbstractApplicationContext 的源码中可以看出...

216

36-49扩展原理

TODOSpring注解驱动开发第36讲——或许,这是你以前没看过的从源码角度理解BeanFactoryPostProcessor的原理 在前面,我们学习了一下Spring中的IOC、AOP以及声明式事务等最核心的知识点,而且我们还掌握了它们的注解驱动开发,不仅如此,我们还从源码的角度分析了一下它们里面的工作原理,相信看过我前面文章的同学,一定对此深有体会。 而从这一讲开始,我们便来学习一下Spring里面一些其他的扩展原理,希望大家通过这些原理的学习,对Spring里面的运行机制,包括其内部的工作原理,能

Princess_Y 181

深入理解 Spring 的 SPI 机制:SpringFactoriesLoader 与 spring.factories 原理与实践

摘要:本文深入解析Spring的SPI机制,重点介绍SpringFactoriesLoader与spring.factories文件的原理与实践。spring.factories作为基于配置文件的服务发现机制,支持模块化扩展,而SpringFactoriesLoader是其核心加载器。文章详细剖析了核心机制、典型应用场景(如自动配置、环境后处理器等),并提供了构建可插拔日志模块的完整示例。最后针对常见问题(如配置未生效、类加载失败等)给出解决方案和调试技巧。全文从原理到实践,系统性地阐述了Spring SP

刘一说的IT专栏 494

Spring源码解析(五)--Spring扩展点和扩展原理源码解析。

前文:通过Spring专题和Mybatis专题,我们学习到了Spring容器在初始化的时候有很多可以利用的机会。我们本篇主要讲解一下几个重要的接口和类,让我们能够在项目中Spring容器初始化的时候,更好的实现我们的需求开发。 一、本篇介绍的接口和类。 1、BeanPostProsessor Bean后置处理器。 2、BeanDefinitionRegistryPostProsessor 动态注册Bean到Spring容器。 3、BeanFactoryPostProsessor bean工厂后置

weixin_44162368的博客 640

Spring Boot 启动准备阶段深度解析:SpringApplication 构造与扩展机制

服务提供者接口,是一种服务发现机制。核心思想接口在核心包定义实现在扩展包提供加载通过配置文件自动发现设计目的:实现解耦和可扩展性,让框架不依赖具体实现。// spring.factories 文件的路径// 缓存(key 是 ClassLoader,value 是解析结果)定义:在 Spring 容器刷新之前执行的初始化器。/*** 初始化给定的应用上下文* @param applicationContext 要初始化的应用上下文*/特点在容器刷新(refresh()之前执行。

2401_88678003的博客 1019

Spring Boot 核心接口与扩展点详细指南

本文详细介绍了Spring Boot的核心接口与扩展点,涵盖容器启动、环境配置和Bean定义等关键阶段。主要内容包括: 容器启动阶段:ApplicationContextInitializer用于早期配置,SpringApplicationRunListener监听启动事件,ApplicationRunner和CommandLineRunner在启动后执行逻辑。 环境配置:EnvironmentPostProcessor动态修改环境变量,PropertySourceLoader支持自定义配置文件加载。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 3374

Spring源码解析(2)之扩展原理ApplicationListener事件发布源码解析

一、Spring是发布事件源码流程 1.1)首先我们自己写一个TulingApplicationListener 实现ApplicationListener​接口,并且把该组件加入到容器中. /** * 创建一个监听器 */ @Component public class TulingApplicationListener implements ApplicationListener { @Override public void onApplicationEvent(Applic

jokeMqc的博客 608

SpringBoot 使用ApplicationListener监听器

使用场景 在一些业务场景中,当Serverlet容器初始化完成、重启、关闭等等一系列动作之后,需要处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等。这个时候我们就可以使用Spring提供的ApplicationListener来进行操作。 原理 ApplicationListener是一个接口,里面只有一个onApplicationEvent方法,方法的参数为ApplicationEvent,ApplicationEvent是个抽象类,顾名思义就是Spring应用的一些Event,Ap

qq_29308413的博客 1418
上一篇: Spring原理解析 之扩展原理-BeanDefinitionRegistryPostProcessor
下一篇: Spring注解 之装配Bean
yyangqqian
博客等级 码龄15年 406粉丝 406原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值