首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过Guice TypeListener为番石榴EventBus订阅者进行迫切的实例化

通过Guice TypeListener为番石榴EventBus订阅者进行迫切的实例化
EN

Stack Overflow用户
提问于 2016-06-17 07:43:20
回答 1查看 242关注 0票数 0

我正在使用番石榴EventBus,我通过基于伟大的例子的类型侦听器注册订阅者。当前代码如下所示

代码语言:javascript
运行
AI代码解释
复制
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. 注入之后,将实际订阅者注册到事件总线。

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-06-19 01:02:47

不久前,我也做了相同的事件总线/guice耦合。我到处玩

代码语言:javascript
运行
AI代码解释
复制
https://github.com/ronmamo/reflections

标识包含带有@Subscribe注释的方法的所有类,然后在模块(bindEager)中注册它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37885538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文