返回
数据发布轻松上手,极简主义者福音 - JFinal-event v2.3.0
闲谈
2023-12-29 12:39:06
JFinal-event 2.x 参考 Spring 4.2.x 中 Event 的使用方式而生,为 JFinal 用户带来更多方便。其核心目标是深层次解耦,为您节约更多时间,去陪恋人、家人和朋友 :) 年初 @idoz 提议实现类似 Spring 4.2 里的 Payload ApplicationEvent,经过几个月的努力,这个特性终于落地。让我们通过具体示例来体验下。
服务端代码示例
import com.jfinal.event.Event;
import com.jfinal.event.PayloadApplicationEvent;
import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
import java.util.Objects;
public class MyPayloadApplicationEvent extends PayloadApplicationEvent {
public static final String TYPE = "my_payload_application_event";
private static final Log log = Log.getLog(MyPayloadApplicationEvent.class);
private final String msg;
public MyPayloadApplicationEvent(Object source, String msg) {
super(source);
Objects.requireNonNull(msg, "msg can not be null.");
this.msg = msg;
}
@Override
public String getType() {
return TYPE;
}
@Override
protected void deliver() {
log.info("event received, msg: " + msg);
}
@Override
public Object getPayload() {
return msg;
}
@Override
public String toString() {
return "MyPayloadApplicationEvent: " + msg;
}
public static void main(String[] args) {
Event eventCenter = Event.create();
String msg = "hello, jfinal event";
eventCenter.addEventListener(new EventListener<MyPayloadApplicationEvent>() {
@Override
public void onEvent(MyPayloadApplicationEvent event) {
String payload = event.getPayload().toString();
if (StrKit.isBlank(payload)) {
log.error("payload is blank");
return;
}
log.info("payload received: " + payload);
}
});
eventCenter.post(new MyPayloadApplicationEvent(eventCenter, msg));
}
}
前端代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="jfinal-event.js"></script>
</head>
<body>
<script>
var eventCenter = new JFinal.Event();
eventCenter.addEventListener('my_payload_application_event', function (event) {
var payload = event.payload;
if (!payload) {
console.error('payload is blank');
return;
}
console.log('payload received: ' + payload);
});
var msg = 'hello, jfinal event';
eventCenter.post(new JFinal.PayloadApplicationEvent(eventCenter, msg));
</script>
</body>
</html>
JFinal-event v2.3.0 还带来了许多其他改进,包括:
- 支持在事件侦听器中使用 Spring IoC 容器中的 bean
- 改进了对异步事件的支持
- 修复了若干个 bug
立即下载 JFinal-event v2.3.0,以获得最佳的事件发布体验!