我正在使用Guava EventBus,我通过基于great example的类型侦听器注册订阅者。当前代码如下所示
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
}
});
}
});
简而言之,代码执行以下操作
@Subscribe
我使用这种方法的问题是它只注册实际注入并已初始化的订户。如果订阅者在发布活动之前尚未使用,则不会对其进行初始化。
在hear
方法中正确找到所有订阅者(在类型遭遇上注册注入侦听器之前),但它们没有实例化,因为它们被懒惰地初始化。
有没有办法在订阅者身上做一些急切的实例化(类似于binding.asEagerSingleton()
)?我知道我必须照顾他们是否是单身人士。
答案 0 :(得分:1)
前一段时间我做了同样的事件/ guice耦合。我玩了
https://github.com/ronmamo/reflections
标识包含使用@Subscribe注释的方法的所有类,然后在模块中注册它们(bindEager)。