返回

数据发布轻松上手,极简主义者福音 - JFinal-event v2.3.0

闲谈

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,以获得最佳的事件发布体验!