gpt4 book ai didi

java - 通过 Guice TypeListener 对 Guava EventBus 订阅者进行热切实例化

转载 作者:行者123 更新时间:2023-12-01 09:47:20 25 4
gpt4 key购买 nike

我正在使用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
}
});
}
});

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

  1. 查找所有具有用 @Subscribe 注解的公共(public)方法的类
  2. 注入(inject)后,向事件总线注册实际订阅者

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

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

有没有办法对订阅者执行诸如急切实例化(类似于 binding.asEagerSingleton() )之类的操作?我知道我必须照顾他们是否单例。

最佳答案

不久前我也做了同样的 eventBus/guice 耦合。我玩过

https://github.com/ronmamo/reflections

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

关于java - 通过 Guice TypeListener 对 Guava EventBus 订阅者进行热切实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37885538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com