字画价格网站建设方案,个人可以做微信小程序吗?,杭州it外包公司,彭山网站建设本质上是设计模式中的观察者模式。
一、什么是观察者模式
观察者模式是一种行为型设计模式#xff0c;它定义了一种一对多的依赖关系#xff0c;当一个对象的状态发生改变时#xff0c;其所有依赖者都会收到通知并自动更新。
二、什么是spring的事件推送
在 Spring 的事…本质上是设计模式中的观察者模式。
一、什么是观察者模式
观察者模式是一种行为型设计模式它定义了一种一对多的依赖关系当一个对象的状态发生改变时其所有依赖者都会收到通知并自动更新。
二、什么是spring的事件推送
在 Spring 的事件机制中我们可以令一个事件类继承 ApplicationEvent 类然后将实现了 ApplicationListener 的 Bean 注册到 spring 容器最后向 ApplicationEventPublisher 推送事件对象即可令所有订阅者收到事件。在 4.2 以后甚至不需要实现 ApplicationListener 接口仅需在 Bean 中方法标记 EventListener 注解即可。
event、listener、publisher
publisher是整个系统公用的。
监听者和事件是配套的
public class LogEventListener implements ApplicationListener
原理
事件的推送 1、将事件推送到上下文 2、将事件推送到广播器
Spring 中的事件发布接口是 ApplicationEventMulticaster这个接口只有一个干活的类就是 SimpleApplicationEventMulticaster在 Spring 容器初始化的 refresh 方法中会调用到 initApplicationEventMulticaster 方法这个方法就是用来初始化事件广播器的。
1、传入一个事件判断是applicationEvent还是普通的java对象普通的需要封装一下再赋值给applicationEvent。 2、判断eventType并且调用广播器去广播事件。 3、匹配合适的listener遍历之前收集到的所有listener判断是否支持当前事件先将支持的listener缓存再遍历listenerBeans也是判断是否支持当前事件支持就获取bean存入过滤listener集合中。就获取到符合条件的listener。
事件推送系统是异步的吗
Spring 中的事件默认情况下是同步的发布者线程会进入阻塞状态直到所有的监听器处理完事件。如果想让事件监听异步执行需要在监听器上添加Async, 同时主启动类上添加EnableAsync注解
是否安全
不推荐在重要业务使用像日志这种可以丢失的可以用简单的事件推送 异步执行。 一方面是代码解耦把日志相关的逻辑从主流程中去掉 另一方面是把日志改成异步的防止影响主线程原先日志是同步的在执行完主流程了最后会执行日志的拼接逻辑但是日志如果报错会影响接口的响应和返回。并且原先在日志逻辑里也是没有加try catch的