[SpingBoot] 3个扩展点

  • 初始化器ApplicationContextInitializer
  • 监听器ApplicationListener
  • Runner: Runner的一般应用场景就是资源释放清理或者做注册中心, 因为执行到Runner的时候项目已经启动完毕了, 这个时候可以注册进注册中心。

    文章目录

        • 1.初始化器ApplicationContextInitializer
        • 2.监听器ApplicationListener
        • 3.callRunners

1.初始化器ApplicationContextInitializer

在这里插入图片描述

setXxxx() 一个是设置初始化器, 一个是设置监听器。

在这里插入图片描述

通过Spring SPI的方式查找这个类型的实现类。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

public class MyApplicationContextInitializer implements ApplicationContextInitializer {@Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {System.out.println("MyApplicationContextInitializer");}
}

发现自己创建的ApplicationContextInitializer已经注册上来了。

在这里插入图片描述

调用了run()方法中的prepareContext()方法中的applyInitializers()方法, 在这个方法中for循环的调用各个初始化器的initialize()方法。

在这里插入图片描述

在这里插入图片描述

2.监听器ApplicationListener

ApplicationEventMulticaster发布事件, Listener监听事件。

定义了两个监听器, 为Started和Starting。

在这里插入图片描述

通过Spring SPI的方式查找这个类型的实现类。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

public class MyStartedApplicationListener implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {System.out.println("MyStartedApplicationListener");}
}
public class MyStartingApplicationListener implements ApplicationListener<ApplicationStartingEvent> {@Overridepublic void onApplicationEvent(ApplicationStartingEvent event) {System.out.println("MyStartingApplicationListener");}
}

在这里插入图片描述

SpringApplication run()方法的listeners.starting()开始进去发送ApplicationStartingEvent广播事件, 由我们自己编写的事件监听器接收到。

在这里插入图片描述

在这里插入图片描述

3.callRunners

在这里插入图片描述

ApplicationRunner和CommandLineRunner。

Runner的一般应用场景就是资源释放清理或者做注册中心, 因为执行到Runner的时候项目已经启动完毕了, 这个时候可以注册进注册中心。

在这里插入图片描述

在这里插入图片描述

@Component
public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("run");}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434472.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构设计师教程(十七)通信系统架构设计理论与实践

通信系统架构设计理论与实践 17.1 通信系统概述17.2 通信系统网络架构17.2.1局域网网络架构17.2.2 广域网网络架构17.2.3 移动通信网网络架构17.2.4存储网络架构17.2.5 软件定义网络架构17.3 网络构建关键技术17.3.1 网络高可用设计17.3.2 IPv4与IPv6融合组网技术17.3.3 SDN技术…

光明之盒:揭开可解释性人工智能的神秘面纱

在人工智能&#xff08;AI&#xff09;的日益普及之际&#xff0c;可解释性人工智能&#xff08;Explainable AI&#xff0c;简称XAI&#xff09;成为了桥接人机理解的关键技术。XAI不仅让人们窥视AI的内在工作原理&#xff0c;还能够提高我们对其决策过程的信任感。本文将深入…

物联网IOT: 风浆叶片拧紧装配及实时监测系统

某大型风电设备,通过机器人应用与精益化生产体系的融合,打造出行业领先的具备柔性生产能力的“脉动式”生产体系。同时在关键工序上。其中,在叶片装配等关键工序上使用由智能机器人代替人工,以提高生产的效率和装配质量可靠性,将六轴机器人、视觉系统、光电系统、液压、气动、伺…

仅使用 Python 创建的 Web 应用程序(前端版本)第08章_商品详细

在本章中,我们将实现一个产品详细信息页面。 完成后的图像如下。 Model、MockDB、Service都是在产品列表页实现的,所以创建步骤如下。 No分类内容1Page定义PageId并创建继承自BasePage的页面类2Application将页面 ID 和页面类对添加到 MultiPageApp 的页面中Page:定义PageI…

HbuilderX报错“Error: Fail to open IDE“,以及运行之后没有打开微信开发者,或者运行没有反应的解决办法

开始 问题:HbuilderX启动时,打开微信开发者工具报错"Error: Fail to open IDE",以及运行之后没有打开微信开发者,或者运行没有反应的解决办法! 解决办法: 按照步骤一步一步完成分析,除非代码报错,否则都是可以启动的 第一步:检查HbuildX是否登录账号 第二步:检查微信…

Stable Diffusion插件Recolor实现黑白照片上色

今天跟大家分享一个使用Recolor插件通过SD实现老旧照片轻松变彩色&#xff0c;Recolor翻译过来的含义就是重上色&#xff0c;该模型可以保持图片的构图&#xff0c;它只会负责上色&#xff0c;图片不会发生任何变化。 一&#xff1a;插件下载地址 https://github.com/pkuliyi…

机器学习 | 利用Pandas进入高级数据分析领域

目录 初识Pandas Pandas数据结构 基本数据操作 DataFrame运算 文件读取与存储 高级数据处理 初识Pandas Pandas是2008年WesMcKinney开发出的库&#xff0c;专门用于数据挖掘的开源python库&#xff0c;以Numpy为基础&#xff0c;借力Numpy模块在计算方面性能高的优势&am…

内网穿透natapp使用教程(Linux)

我的使用场景&#xff1a;在家访问学校服务器&#xff0c;由于不在一个局域网&#xff0c;所以需要使用内网穿透&#xff0c;我使用的是natapp。需要在有局域网的时候做好以下步骤。 &#xff08;natapp官网&#xff1a;https://natapp.cn/&#xff09; 1. 下载客户端 &#x…

Spring MVC 请求流程

SpringMVC 请求流程 一、DispatcherServlet 是一个 Servlet二、Spring MVC 的完整请求流程 Spring MVC 框架是基于 Servlet 技术的。以请求为驱动&#xff0c;围绕 Servlet 设计的。Spring MVC 处理用户请求与访问一个 Servlet 是类似的&#xff0c;请求发送给 Servlet&#xf…

【Linux】从C语言文件操作 到Linux文件IO | 文件系统调用

文章目录 前言一、C语言文件I/O复习文件操作&#xff1a;打开和关闭文件操作&#xff1a;顺序读写文件操作&#xff1a;随机读写stdin、stdout、stderr 二、承上启下三、Linux系统的文件I/O系统调用接口介绍open()close()read()write()lseek() Linux文件相关重点 复习C文件IO相…

代码块(Java)

代码块是类的成分之一&#xff0c;分为静态代码块和实例代码块 1.静态代码块&#xff1a;static{} 类加载时会自动执行一次&#xff0c;可以完成类的初始化&#xff0c;比如初始化赋值 2.实例代码块&#xff1a;{} 每次创建对象时&#xff0c;执行实例代码块&#xff0c;会…

MybatisPlus二级映射和关联对象ResultMap

文章目录 一、业务背景1. 数据库表结构2. 需求 二、使用映射直接得到指定结构三、其他文件1. Mapper2. Service3. Controller 四、概念理解一级映射二级映射聚合 五、标签使用1. \<collection\> 标签2. \<association\> 标签 在我们的教程中&#xff0c;我们设计了…