当前位置: 首页 > 面试题库 >

通用的,注释驱动的事件通知框架

厍光霁
2023-03-14
问题内容

尽管Java的简单,接口驱动的事件通知框架早于寒武纪就已经存在(例如,java.beans.PropertyChangeSupport),但是使用注释驱动的事件通知的框架正变得越来越流行。

有关示例,请参见JBossCache 2.2。侦听器类的侦听器方法带有注释,而不是遵循严格的接口。因为您不必编写您不感兴趣的侦听器回调的空实现(而且是的,我知道侦听器适配器超类),所以这更容易编程和易于阅读。

这是来自JBossCache文档的html" target="_blank">示例:

@CacheListener
public class MyListener {
   @CacheStarted
   @CacheStopped
   public void cacheStartStopEvent(Event e) {
         switch (e.getType()) {
            case Event.Type.CACHE_STARTED:
               System.out.println("Cache has started");
               break;    
            case Event.Type.CACHE_STOPPED:    
               System.out.println("Cache has stopped");
               break;    
         }
   }

   @NodeCreated    
   @NodeRemoved
   @NodeVisited
   @NodeModified
   @NodeMoved
   public void logNodeEvent(NodeEvent ne) {
         log("An event on node " + ne.getFqn() + " has occured");
   }

}

这样做的问题是,由于注释和反射的性质,它更多地是涉及编写框架来支持这种事情的过程。

因此,在我开始编写通用框架之前,我希望有人已经做到了。有人遇到过这样的事情吗?


问题答案:

您现在可以使用EventBus做到这一点。

以下示例来自EventBus入门指南。根据发布的事件进行更新的状态栏,无需将状态栏控件/小部件注册为发布者的侦听器。没有EventBus,状态栏将需要添加为许多类的侦听器。状态栏也可以随时创建和销毁。

public StatusBar extends JLabel {
    public StatusBar() {
        AnnotationProcessor.process(this);
    }
    @EventSubscriber(eventClass=StatusEvent.class)
    public void updateStatus(StatusEvent statusEvent) {
        this.setText(statusEvent.getStatusText();
    }
}

ELF(事件侦听器框架)是一个类似的项目,但它似乎还不成熟。

我目前正在研究有关发布-订阅事件驱动编程的事件通知框架| Kev的Spring vs
Java EE Dev
以及后续文章。



 类似资料:
  • 如何从google Drive获得通知响应中的事件名称? 例如:如果我关闭文件,那么事件名称作为响应,如close等。

  • 错误在此输入图像描述 我试图发送事件的通知,当一些喜欢和评论他的帖子,通知评论和喜欢在这里工作是我的通知类。 我的控制器功能代码,用于通知评论 我的请求

  • 在调用之前、调用之后、出现异常时,会触发 oninvoke、onreturn、onthrow 三个事件,可以配置当事件发生时,通知哪个类的哪个方法 1。 服务提供者与消费者共享服务接口 interface IDemoService { public Person get(int id); } 服务提供者实现 class NormalDemoService implements IDemo

  • 我正在学习TF并尝试应用一个架构体系来创建: 一个简单的lambda函数 一个SNS话题 让lambda订阅SNS主题 以一定间隔向主题发布消息的Cloud Watch事件 一个Cloud Watch日志组,用于检查lambda是否收到SNS的通知 允许来自SNS的调用的lambda权限 我能够成功地应用它。基础架构看起来非常好(当我通过可视化aws控制台自己创建时,它具有相同的方面) 但云观察事

  • 问题内容: 我正在建立一个新的JPA + Spring项目。(对于我来说,作为程序员)之间的区别是什么? 和 在我的applicationContext.xml中? 问题答案: 代理和字节码编织方面之间存在巨大差异。代理只能在调用来自“外层空间”的情况下进行拦截,而不能在调用来自对象本身的情况下进行拦截(this.transactionalMethod()) 这意味着,如果您有一个带有两个方法T和

  • 我想知道Git上有没有在android应用程序上实现Drive REST Api推送通知的例子? 我的应用程序目前是基于GDAA构建的,但它不支持我需要的文件更改的实时通知,文档也不是特别清楚如何在java中发送post请求,在哪里发送等等。 我怀疑这个用户的工作是我需要的,但他没有发布他的完整代码。Google Drive REST API通知对应用程序文件夹中的更改无效