观察者模式与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对于未来研发流程的巨大变革。
|
机器学习/深度学习 IDE Java
springboot 应用迁移
快速学习 springboot 应用迁移
129 0
springboot 应用迁移
阿里出品!SpringBoot应用自动化部署神器,IDEA版Jenkins?
CloudToolkit简介 CloudToolkit是阿里出品的一款IDEA插件,通过它我们可以更方便地实现自动化部署,其内置的终端工具和文件上传功能,即使用来管理服务器也非常方便!这款IDEA插件不仅功能强大,而且完全免费! 安装 CloudToolkit的安装是非常简单的,直接在IDEA的插件市场中搜索Cloud Toolkit然后进行安装即可。
|
Java Linux Maven
《SpringBoot系列六》:SpringBoot应用jar包启动原理
SpringBoot Jar包启动原理? SpringBoot Jar包目录结构? JarLauncher的运行原理?
991 0
《SpringBoot系列六》:SpringBoot应用jar包启动原理
|
Java 应用服务中间件 Maven
《SpringBoot系列五》:SpringBoot应用分类?默认类型如何推导出(deduceFromClasspath())?
《SpringBoot系列五》:SpringBoot应用分类?默认类型如何推导出(deduceFromClasspath())?
211 0
《SpringBoot系列五》:SpringBoot应用分类?默认类型如何推导出(deduceFromClasspath())?
|
消息中间件 缓存 Java
【SpringBoot2 从0开始】如何编写 springboot 应用?
【SpringBoot2 从0开始】如何编写 springboot 应用?
【SpringBoot2 从0开始】如何编写 springboot 应用?
|
存储 缓存 JSON
Redis应用 02、Springboot整合redis
Redis应用 02、Springboot整合redis
Redis应用 02、Springboot整合redis
|
存储 JSON Prometheus
Prometheus+SpringBoot应用监控全过程详解
1. Prometheus是什么 Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案。
|
存储 数据可视化 Java
SpringBoot应用整合并使用Docker安装ELK实现日志收集
SpringBoot应用整合并使用Docker安装ELK实现日志收集
SpringBoot应用整合并使用Docker安装ELK实现日志收集
|
IDE Java Maven
Java SpringBoot 应用使用命令行 mvn spring-boot run 启动的原理
将应用程序打包为 jar 并使用嵌入式 HTTP 服务器的最大优势之一是可以像运行其他任何应用程序一样运行这些提供了 Web 功能的应用程序。 调试 Spring Boot 应用程序也很容易; 不需要任何特殊的 IDE 插件或扩展。
176 0