事件机制之观察者模式

事件机制之观察者模式

以创建订单的信息通知为例。很多人都是从头写到尾,创建订单,短信通知,微信通知。一大串,好几百,好几千行的代码。
好一些的人会将短信和微信的通知封装出方法来进行简化。我说句实话,在我没有接触事件机制,我也就是这样写的,条例清晰,思路明确,注释完整,还会沾沾自喜。再我接触触事件机制后,我发现以前的我是那么的low。low的不行。
所以做这一行,需要不断的学习,学习新技术,学习新思想。

观察者模式

观察者模式:定义对象间的一中一对多的依赖关系,当一个对象的态度发生改变时,所有依赖于它的对象都得到通知并被自动更新。
又称:发布/订阅、消息通知机制、事件监听、事件驱动编程
利用观察者模式设计高拓展性的代码,利用Spring事件机制改造订单功能。

在这里插入图片描述

理解 Spring ApplicationListener

ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理。

如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被触发。这种事件机制都必须需要程序显示的触发。

其中spring有一些内置的事件,当完成某种操作时会发出某些事件动作。比如监听ContextRefreshedEvent事件,当所有的bean都初始化完成并被成功装载后会触发该事件,实现ApplicationListener接口可以收到监听动作,然后可以写自己的逻辑。

Spring 内置事件 & 描述

  • ContextRefreshedEvent
    ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用
  • ContextStartedEvent
    当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。
  • ContextStoppedEvent
    当使用 ConfigurableApplicationContext 接口中的 stop() 停止 ApplicationContext 时,发布这个事件。你可以在接受到这个事件后做必要的清理的工作。
  • ContextClosedEvent
    当使用 ConfigurableApplicationContext 接口中的 close() 方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启。
  • RequestHandledEvent
    这是一个 web-specific 事件,告诉所有 bean HTTP 请求已经被服务。只能应用于使用DispatcherServlet的Web应用。在使用Spring作为前端的MVC控制器时,当Spring处理用户请求结束后,系统会自动触发该事件。

举例,代码不重要思路很重要

  • 比如要监听ContextRefreshedEvent的时可以实现ApplicationListener接口,并且传入要监听的事件

在这里插入图片描述

  • 自定义事件

    可以自定义事件,然后做完业务处理后手动发出。同上集成某个监听接口,接收到事件后进行业务处理

    事件定义:

在这里插入图片描述

  • 监听定义

在这里插入图片描述
在这里插入图片描述

  • 业务触发

在这里插入图片描述

  • 请求接口
    在这里插入图片描述
  • 控制台打印结果

在这里插入图片描述
代码不是最重要的,重要的是思路,如果你学会了,想一想,你以前写的代码,有哪些可以像这样进行改善。想一想以后再写代码前,我是不是可以用到这样的设计模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值