自定义事件监听组件

在上面了解了在程序启动时准备工作和启动过程会扫描 spring.factories 中的配置,拿到要启动的各种配置。这也说明可以自己自定义一些程序启动时会自动扫描的文件,然后在 resources\META-INF\ 下创建 spring.factories 文件,里面把自定义的文件加进去好让扫描到,加入容器中,在启动过程中被调用,做一些准备工作。

自定义 ApplicationContextInitializer
public class MyApplicationContextInitializer implements ApplicationContextInitializer {@Overridepublic void initialize(ConfigurableApplicationContext configurableApplicationContext) {System.out.println("MyApplicationContextInitializer....initialize");}
}
自定义 ApplicationListener
public class MyApplicationListener implements ApplicationListener {@Overridepublic void onApplicationEvent(ApplicationEvent applicationEvent) {System.out.println("MyApplicationListener....onApplicationEvent");}
}
自定义 SpringApplicationRunListener

这个 SpringApplicationRunListener 接口里面的方法都是默认实现的,可以全部实现,拿来做一些准备。

而且,实现类需要一个有参构造器,参数类型一个是 SpringApplication ,一个 String 。否则就报错提示少一个参数为 xxx 的构造方法

public class MySpringApplicationRunListener implements SpringApplicationRunListener {private SpringApplication application;public MySpringApplicationRunListener(SpringApplication application,String[] args){this.application=application;}@Overridepublic void starting() {System.out.println("MySpringApplicationRunListener...starting");}@Overridepublic void environmentPrepared(ConfigurableEnvironment environment) {System.out.println("MySpringApplicationRunListener...environmentPrepared");}@Overridepublic void contextPrepared(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...contextPrepared");}@Overridepublic void contextLoaded(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...contextLoaded");}@Overridepublic void started(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...started");}@Overridepublic void running(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...running");}@Overridepublic void failed(ConfigurableApplicationContext context, Throwable exception) {System.out.println("MySpringApplicationRunListener...failed");}
}

底下这两个类型的组件能通过 @Order 进行排序录入数组,然后根据优先级遍历调用 run 方法。属性数字越大优先级越高

自定义 CommandLineRunner
@Component
@Order(2)
public class MyCommandLineRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("MyCommandLineRunner...run");}
}
自定义 ApplicationRunner
@Component
@Order(1)
public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("MyApplicationRunner...run");}
}

在 spring.factories 中

这个内容可以参照官方依赖,直接复制,然后在后面添加上自定义的配置类全路径【copy reference】

# Initializers
org.springframework.context.ApplicationContextInitializer=\com.xl.bibiji.custom.MyApplicationContextInitializer# Application Listeners
org.springframework.context.ApplicationListener=\com.xl.bibiji.custom.MyApplicationListener# Run Listeners
org.springframework.boot.SpringApplicationRunListener=\
com.xl.bibiji.custom.MySpringApplicationRunListener

启动后

在上面观察过源码,了解过各种配置的获取加载调用方法时间,就能根据这个顺序对程序启动时实现对应的接口在相应的方法里面加一些初始化配置。

MyApplicationListener....onApplicationEvent
MySpringApplicationRunListener...starting
MyApplicationListener....onApplicationEvent
MySpringApplicationRunListener...environmentPrepared.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.3.7.RELEASE)MyApplicationContextInitializer....initialize
MyApplicationListener....onApplicationEvent
MySpringApplicationRunListener...contextPrepared
2022-03-07 20:35:10.978  INFO 21684 --- [           main] com.xl.bibiji.BibijiApplication          : Starting BibijiApplication on xyk with PID 21684 (D:\IDEAProject\bibiji\target\classes started by xyk in D:\IDEAProject\bibiji)
2022-03-07 20:35:10.981  INFO 21684 --- [           main] com.xl.bibiji.BibijiApplication          : No active profile set, falling back to default profiles: default
MyApplicationListener....onApplicationEvent
MySpringApplicationRunListener...contextLoaded
2022-03-07 20:35:12.141  INFO 21684 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-03-07 20:35:12.153  INFO 21684 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-03-07 20:35:12.154  INFO 21684 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
2022-03-07 20:35:12.295  INFO 21684 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-03-07 20:35:12.295  INFO 21684 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1244 ms
2022-03-07 20:35:12.512  INFO 21684 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2022-03-07 20:35:12.711  INFO 21684 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
MyApplicationListener....onApplicationEvent
MyApplicationListener....onApplicationEvent
2022-03-07 20:35:12.724  INFO 21684 --- [           main] com.xl.bibiji.BibijiApplication          : Started BibijiApplication in 2.227 seconds (JVM running for 3.239)
MyApplicationListener....onApplicationEvent
MyApplicationListener....onApplicationEvent
MySpringApplicationRunListener...started
MyApplicationRunner...run
MyCommandLineRunner...run
MyApplicationListener....onApplicationEvent
MyApplicationListener....onApplicationEvent
MySpringApplicationRunListener...running

SpringBoot--->>>原理解析-->>自定义事件监听组件相关推荐

  1. SpringBoot重点详解--事件监听

    目录 自定义事件监听 Springboot 启动事件监听 Springboot 事件监听为 Bean 与 Bean 之间的消息通信提供支持:当一个 Bean 做完一件事以后,通知另一个 Bean 知晓 ...

  2. java 事件监听器是组件_JavaWeb的三大组件之事件监听组件(Listener)

    JavaWeb监听器 三大组件: Servlet Listener Filter 监听器: 它是一个接口,内容由我们来实现: 它需要注册,例如注册在按钮上! 监听器中的方法,会在特殊事件发生时被调用! ...

  3. cocos2d-js 自定义事件监听派发

    熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法. cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManag ...

  4. EventTarget.addEventListener()事件监听

    文章目录 EventTarget.addEventListener()的意义和原理 什么是事件监听 addEventListener()的原理 addEventListener()的语法 addEve ...

  5. 事件监听机制(一)Java事件监听

    事件监听机制(一)Java事件监听 事件监听实现流程 事件对象: 继承自java.util.EventObject对象,由开发者自行定义实现. 事件源: 就是触发事件的源头,不同的事件源会触发不同的事 ...

  6. java中事件监听的实现

    一. 什么是监听事件 在程序执行过程中对某一个功能或者事件进行监听.例如,用户登录成功后,发送短信或者邮件信息给用户. 二.如何完成监听事件 监听事件是基于观察者模式实现的,要完成监听事件,需要准备好 ...

  7. Springboot事件监听机制:工作原理

    目录 前言 1.观察者模式 1.1观察者模式的核心元素 1.2观察者模式的工作流程 2.springboot事件监听机制的基本工作原理 2.1事件发布器是什么时候在哪里产生的呢? 2.2事件监听器是什 ...

  8. Spring5源码 - 12 Spring事件监听机制_异步事件监听应用及源码解析

    文章目录 Pre 实现原理 应用 配置类 Event事件 事件监听 EventListener 发布事件 publishEvent 源码解析 (反推) Spring默认的事件广播器 SimpleApp ...

  9. vue_组件_监听组件事件

    1.$emit 的使用 在组件中注册自定义事件 $emit(事件名, 参数)    //该参数会当作第一个参数传入绑定的函数中 下面用一个菜单栏例子来说明,如下图所示 组件 Vue.component ...

最新文章

  1. 【linux】Valgrind工具集详解(十三):DRD(线程错误检测器)
  2. 【中级软考】多态与继承的概念
  3. Linux中文显示乱码?如何设置centos显示中文
  4. [2017.3.23]Miller-Rabin
  5. 【数学基础】拉格朗日乘子法
  6. 10月15日 2016中国开源年会期待您的参与
  7. python对列表中的数值进行统计运算_python-从单词列表中计算元音并返回数字作......
  8. 论文浅尝 | GNN with Generated Parameters for Relation Extraction
  9. java打印平行四边形
  10. 创业与老子的顺其自然
  11. 实时查看磁盘inode和block变化
  12. VS 2008中PDA开发环境的相关配置
  13. 利用Codejock创建TaskPanel(ToolBox) - 2
  14. HBase Java API类介绍
  15. Java8新特性之Lambda表达式
  16. ruby 安装和使用
  17. IE浏览器 请求报304,解决办法 设置页面禁止缓存
  18. 如何在python 设置输入字符的 颜色 背景色,前景色
  19. eclipse中servers(服务器)的配置
  20. 基于qiankun.js的微前端应用实战

热门文章

  1. 二进制补码转为十进制
  2. 通过停车场计算车费案例练习JavaIO流
  3. CodeForces - 1303 A Erasing Zeroes B National Project
  4. ESP_12S模块-SmartConfig配网
  5. android基础笔记
  6. Linux安装samba
  7. Linux学习——awk
  8. @profileActive@ 不生效
  9. 基于深度学习的环路滤波的消融实验
  10. 【2019-游记】中山纪念中学暑期游Day2