当前位置: 首页 > 知识库问答 >
问题:

通过Guice TypeListener为Guava EventBus订阅者进行急切的实例化

空英逸
2023-03-14

我正在使用Guava EventBus,并根据一个很好的示例,通过类型侦听器注册订阅者。当前代码如下所示

bindListener(methodsAnnotatedWith(Subscribe.class), new TypeListener() {
    @Override
    public <I> void hear(TypeLiteral<I> typeLiteral, TypeEncounter<I> typeEncounter) {
        typeEncounter.register(new InjectionListener<I>() {
            @Override
            public void afterInjection(I i) {
                register(i); // register with event bus
            }
        });
    }
});

简而言之,代码执行以下操作

  1. 查找所有具有用@Subscribe
  2. 注释的公共方法的类
  3. 注入后,将实际订阅者注册到事件总线

这种方法的问题是,它只注册实际注入并已初始化的订阅者。如果在发布事件之前未使用订阅服务器,则不会对其进行初始化。

所有订阅者都在听觉方法中正确找到(在类型遭遇上注册注入侦听器之前),但它们没有被实例化,因为它们是延迟初始化的。

有没有一种方法可以在订阅服务器上执行诸如急切实例化(类似于binding.asEagerSingleton())之类的操作?我知道我必须照顾他们是否单身。

共有1个答案

张昊穹
2023-03-14

不久前,我做了同样的eventBus/guice耦合。我和

https://github.com/ronmamo/reflections

识别包含用@Subscribe注释的方法的所有类,然后将它们注册到模块中(bindegare)。

 类似资料:
  • Tendermint 会发出不同的事件,您可以通过Websocket订阅这些事件。这对于第三方应用程序(如 analysys)或检查状态非常有用。 事件列表 您可以通过 Websocket 调用 subscribe RPC 方法订阅上面的任何事件。 { "jsonrpc": "2.0", "method": "subscribe", "id": "0", "para

  • 问题内容: 我正在与redis一起在socket.io客户端之间发布和订阅消息,当客户端连接到服务器()时,我正在使用创建一个变量,然后使用subscription函数将客户端订阅到频道。 我的问题是,是否有权使用相同的订阅变量来执行发布操作?还是创建另一个用于发布消息的实例很重要,所以我将有2个实例,一个用于发布,一个用于订阅… 谢谢 问题答案: 从Redis文档: 一旦客户端进入订阅状态,就不

  • 我通读了RxJS文档,并希望确保我理解了< code > subscriber . unsubscribe()和< code > subscriber . complete()之间的区别。 假设我有一个有两个订阅者的可观察对象,订阅者1和订阅者2。如果订阅者1对其订阅调用取消订阅,它将不再接收来自可观察对象的通知,但订阅者2将继续接收它们。 <代码>的文档。complete(): 观察者回调,用于

  • 我想用Java实现各种各样的发布者/订阅者模式,但目前已经没有主意了。 有1个发布者和N个订阅者,发布者发布对象,然后每个订阅者需要按照正确的顺序对每个对象进行一次且仅处理一次。发布者和每个订阅者在自己的线程中运行。 在我最初的实现中,每个订阅者都有自己的阻塞队列,发布者将对象放入每个订阅者的队列中。这可以正常工作,但如果任何订阅者的队列已满,发布者将被阻塞。这会导致性能下降,因为每个订阅者处理对

  • 我正在尝试让Spring WebSocket(Spring 4)在我一直在做的项目中工作。到目前为止,我已经打开了WebSocket,添加了订阅者并发送了消息。 从昨天开始,我一直在试图弄清楚为什么我的endpoint不处理HTML中包含的stomp客户端发送的消息。控制台中实际上也没有错误(好吧,我不完全确定这里的“连接到服务器未定义”是什么意思)。 以下是Chrome控制台的输出: 这是我的代

  • 我有一个发布者,它的发布速度可能比订阅者处理数据的速度更快。为了解决这个问题,我开始背压。因为我不想丢弃任何数据,所以我使用反应性回拉压力。我的理解是,订阅者能够告诉发布者何时发布更多数据,如本文及以下段落所述。 出版者是一个可流动的系统,它以同步的方式并行工作,然后合并成一个连续的可流动系统。数据应该被缓冲最多10个元素,当缓冲区满时,Flowable不应该发布更多数据,并等待下一个请求。 订阅