模块输出的Guice Names.bindProperties(binder(), properties)



我使用一个外部服务来提供属性,但是希望使这些属性作为@Named(..) vars可用。尝试在配置方法中使用npe:

执行此操作失败。
Names.bindProperties(binder(), myPropRetriever.getProperties());

失败是因为直到向导完成它的工作才出现mypropretriiever。我可以理解为什么这是有道理的-有人知道任何时髦的黑客可能会解决这个问题吗?在这种情况下会很方便…

感谢durron597提供的相关问题的指针,这给了我足够的答案。答案是使用子注入器对上一个注入器的输出执行操作。在下面的例子:

Injector propInjector = Guice.createInjector(new PropertiesModule());
PropertiesService propService = propInjector.getInstance(PropertiesService.class);
Injector injector = propInjector.createChildInjector(new MyModule(Objects.firstNonNull(propService.getProperties(), new Properties())));

注入器现在是应用其余部分的注入器。

然后在MyModule中,你可以对创建的对象执行操作:

public class MyModule extends AbstractModule {
private final Properties properties;
public MyModule(Properties properties){
    this.properties=properties;
}
@Override
protected void configure() {
    // export all the properties as bindings
    Names.bindProperties(binder(), properties);
    // move on to bindings
    // bind(..);
}

}

如果它对其他人有帮助…!

相关内容

  • 没有找到相关文章

最新更新