开发者社区> code-x> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

观察者模式与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各个生命周期的事件

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringBoot 整合 Redis
SpringBoot整合Redis 本实例应用redis做登录及状态检查 添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> application.
898 0
基于SpringBoot+Redis的Session共享与单点登录
title: 基于SpringBoot+Redis的Session共享与单点登录date: 2019-07-23 02:55:52categories: 架构author: mrzhoutags:SpringBootredissession单点登录基于SpringBoot+Redis的Session共享与单点登录前言使用Redis来实现Session共享,其实网上已经有很多例子了,这是确保在集群部署中最典型的redis使用场景。
2922 0
SpringBoot连接Redis哨兵模式
SpringBoot连接Redis哨兵模式
7054 0
SpringBoot(十)_springboot集成Redis
Redis 介绍 Redis是一款开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存也可持久化的日志型、Key-Value高性能数据库。 数据模型 Redis 数据模型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的 NoSQL 键-值数据存储。
1108 0
SpringBoot中搭建Redis缓存
SpringBoot中搭建Redis缓存 (一)SpringBoot中搭建Redis缓存 这篇文章讲述如何在Springboot中搭建redis,参考了很多大神的文章但是运用在我的项目里却不能发挥出来 ,可能框架原因把,因为是在项目搭建完成后再来搭的redis的。
1200 0
SpringBoot+Redis实现Session数据共享
使用SpringBoot+Redis实现Session数据共享。
1838 0
springboot中redis的使用和分布式session共享问题
本文旨在解决分布式系统的session如何共享问题,大致思路:session放入redis。其他解决方案:持久化、放cache等都可以,但是自从有了redis,这完全可以变的简简单单。
1174 0
+关注
14
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载