观察者模式与SpringBoot应用

简介: 观察者模式与SpringBoot应用

当对象间存在一对多关系时, 则使用观察者模式(Observer Pattern). 比如, 当一个对象被修改时, 则会自动通知依赖它的对象.


优点:

  1. 观察者和被观察者是抽象耦合的
  2. 建立一套触发机制

SpringBoot应用场景

在SpringBoot启动流程中org.springframework.boot.SpringApplication#run(java.lang.String...)这个方法里

SpringApplicationRunListeners listeners = getRunListeners(args);
  listeners.starting();


SpringBoot加载在spring.factories中预定义的

org.springframework.boot.context.event.EventPublishingRunListener这个类通过其内部定义的事件发布器发布事件

private final SimpleApplicationEventMulticaster initialMulticaster;.
  @Override
  public void starting() {
    //事件发布器&事件
    this.initialMulticaster.multicastEvent(new ApplicationStartingEvent(this.application, this.args));
  }


最终在这个org.springframework.context.event.SimpleApplicationEventMulticaster#multicastEvent(org.springframework.context.ApplicationEvent, org.springframework.core.ResolvableType)方法进行监听器的执行

@Override
  public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) {
    ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));
    Executor executor = getTaskExecutor();
    //getApplicationListeners根据事件和事件类型过滤监听器
    for (ApplicationListener<?> listener : getApplicationListeners(event, type)) {
      if (executor != null) {
        executor.execute(() -> invokeListener(listener, event));
      }
      else {
        //最终调用监听器的onApplicationEvent方法
        invokeListener(listener, event);
      }
    }
  }


由此, 开发者可以通过spring.factories定义接口实现类, 处理SpringBoot各个生命周期的事件

目录
相关文章
|
运维 监控 Java
如何在阿里云serverless发布一个Springboot应用
本文主要很大家分享了如何在阿里云serverless发布一个Springboot应用,通过实际的操作感受serverless对于未来研发流程的巨大变革。
|
jenkins Java 持续交付
Jenkins + Docker + Gitee自动化部署SpringBoot应用
阅读本篇文章需要你有Docker、Git、SpringBoot、Linux等基础知识。
1265 0
Jenkins + Docker + Gitee自动化部署SpringBoot应用
|
存储 数据可视化 Java
SpringBoot应用整合并使用Docker安装ELK实现日志收集
SpringBoot应用整合并使用Docker安装ELK实现日志收集
SpringBoot应用整合并使用Docker安装ELK实现日志收集
|
存储 JSON Prometheus
Prometheus+SpringBoot应用监控全过程详解
1. Prometheus是什么 Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案。
|
机器学习/深度学习 IDE Java
springboot 应用迁移
快速学习 springboot 应用迁移
springboot 应用迁移
|
弹性计算 网络协议 Java
函数计算部署SpringBoot应用
通过模板创建以及仓库导入应用来部署一个SpringBoot应用
2397 2
函数计算部署SpringBoot应用
阿里出品!SpringBoot应用自动化部署神器,IDEA版Jenkins?
CloudToolkit简介 CloudToolkit是阿里出品的一款IDEA插件,通过它我们可以更方便地实现自动化部署,其内置的终端工具和文件上传功能,即使用来管理服务器也非常方便!这款IDEA插件不仅功能强大,而且完全免费! 安装 CloudToolkit的安装是非常简单的,直接在IDEA的插件市场中搜索Cloud Toolkit然后进行安装即可。
|
Java Linux Maven
《SpringBoot系列六》:SpringBoot应用jar包启动原理
SpringBoot Jar包启动原理? SpringBoot Jar包目录结构? JarLauncher的运行原理?
1293 0
《SpringBoot系列六》:SpringBoot应用jar包启动原理
|
Java 应用服务中间件 Maven
《SpringBoot系列五》:SpringBoot应用分类?默认类型如何推导出(deduceFromClasspath())?
《SpringBoot系列五》:SpringBoot应用分类?默认类型如何推导出(deduceFromClasspath())?
254 0
《SpringBoot系列五》:SpringBoot应用分类?默认类型如何推导出(deduceFromClasspath())?
|
消息中间件 缓存 Java
【SpringBoot2 从0开始】如何编写 springboot 应用?
【SpringBoot2 从0开始】如何编写 springboot 应用?
【SpringBoot2 从0开始】如何编写 springboot 应用?
下一篇
无影云桌面