通过Guice Typelistener的Guava EventBus订户急切的实例化



我正在使用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. 注射后,用事件总线注册实际订户

我对这种方法遇到的问题是,它仅注册实际注入并已初始化的订户。如果在发布事件之前尚未使用订户,则不会初始化。

hear方法中正确找到所有订户(在类型遇到的注射侦听器之前),但并未实例化,因为它们是懒惰的初始化。

有没有办法做类似订户上的急切实例化(类似于binding.asEagerSingleton())?我知道我将不得不照顾他们是否是单人。

我在一段时间前进行了相同的eventbus/guice耦合。我玩了

https://github.com/ronmamo/reflections

识别包含@subscribe注释的方法的所有类,然后在模块(bindeager)中注册。

最新更新