我正在使用番石榴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
}
});
}
});
简而言之,该代码执行以下操作
@Subscribe
注释的公共方法的类这种方法的问题是,它只注册实际注入并已初始化的订阅服务器。如果在发布事件之前没有使用订阅服务器,则不会初始化订阅服务器。
所有订阅者都正确地在hear
方法中找到(在类型相遇时注册注入侦听器之前),但是它们没有被实例化,因为它们是延迟初始化的。
是否有一种方法可以在订阅服务器上执行类似于热切实例化(类似于binding.asEagerSingleton()
)的操作?我知道我得照顾他们是否单身。
发布于 2016-06-19 01:02:47
不久前,我也做了相同的事件总线/guice耦合。我到处玩
https://github.com/ronmamo/reflections
标识包含带有@Subscribe注释的方法的所有类,然后在模块(bindEager)中注册它们。
https://stackoverflow.com/questions/37885538
复制相似问题