This action will force synchronization from JbootProjects/jboot, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
答案是:为了解耦,保持自身的独立和简洁,从而降低系统复杂度。
举个例子: 用户注册功能几乎是互联网系统必备的功能,用户注册的功能非常简单,用户提交注册信息,系统验证用户合法性后保存信息到数据库。
但是,由于运营等需求,可能在某个时间点需要增加某个功能,例如:
同时,在稍微复杂的系统里,一个系统往往可能会有多个注册入口,比如网页注册、APP通过api注册、微信用户自动登录时注册、第三方用户登录时进行注册...
那么,此时,注册功能每添加一个新的需求,就需要修改很多地方的代码...出现很多的代码冗余。
如何解决呢?
此时就用到了事件机制了。在用户注册的时候,系统只需要发送一个新用户注册的事件,让事件的监听器去获取这个事件后,执行自己的业务逻辑。
每个需求,就是一个事件监听器。当有新的需求出现的时候,我们只需要写一个新的事件监听器就可以了,其他任何地方的所有代码都不需要改动。
事件机制由两部分组成,一个是发送者,一个是接收者。发送者只是一个抽象的概念,在 Jboot 中并没有这个对象的存在。
当我们需要发送事件的时候,只需要调用如下代码就可以了。
Jboot.sendEvent("eventName", data)
事件监听器如何监听到这个事件呢,只需要2步:
JbootEventListener
接口@EventConfig
注解配置上这个编写的类例如:
@EventConfig(action = {"eventName","event1","event2"})
public class MyEventListener implements JbootEventListener {
public void onEvent(JbootEvent event){
Object data = event.getData();
System.out.println("get data:"+data);
}
}
此时,当有 eventName
, event1
, event2
任何一个事件发送的时候,以上的 MyEventListener.onEvent
都会被触发执行。
备注 事件机制和 MQ(消息队列)很相似,主要区别是在于事件机制只是在 Jvm 应用内执行,解决的是业务直接的耦合问题。
MQ(消息队列)解决的是分布式下,多个系统的事件(或者消息)发送和监听,MQ 需要第三方的 中间件 ,例如:Redis、rabbitMQ、activeMQ...等。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。