【发布时间】:2020-12-16 04:06:32
【问题描述】:
我想做这样的绑定,
bind(Supplier<TestClass>).toProvider(Provider<Supplier<TestClass>>).in(Singleton.class);
提供程序由外部函数返回,因此,在toProvider() 内部,我调用该函数并返回Provider<Supplier<TestClass>>。
供应商来自 guava,这样做的原因是,有一个与 TestClass 关联的文件,我需要读取该文件并将这些值分配给 TestClass 的各个字段。
并且该文件在运行时更改,因此我需要一种方法来刷新存储在 TestClass 中的值。待办事项我使用的番石榴供应商。 Guava 供应商有一个 get 方法,当调用该 get 方法时,如果我使用 memoizeWithExpiration() 创建实例,那么它会检查 TTL 值,如果它通过,那么我可以指定一个 lambda 函数来读取文件并分配值。
所以我需要像这样注入Supplier<TestClass>
@Inject
Supplier<TestClass> someClassSupplier;
但是用 Guice 进行绑定让我感到困惑。
【问题讨论】:
-
你真的应该更新到 Guice 4(Guice 5 即将推出):Guice 3 真的很老,在 4 中提供了许多与你类似的极端情况的有用功能,而 3 中没有。
标签: java dependency-injection guava guice guice-3