强制/建议使用requireExplicitBindings

时间:2013-06-06 11:17:48

标签: java dependency-injection guice

我正在使用guice并看到一个使用binder().requireExplicitBindings() here的示例 示例如下:

Injector injector = Guice.createInjector(new SandwichModule(), new AbstractModule() {
    @Override
    protected void configure() {
        binder().requireExplicitBindings();
        bind(GuiceFilter.class);
    }
});

导致例外的例外

com.google.inject.ConfigurationException: Guice configuration errors:

1) Explicit bindings are required and ...

是否必须使用它,或者只是推荐使用它?如果它只是推荐我只是想知道为什么要使用它?

2 个答案:

答案 0 :(得分:3)

它既不是强制性的(那么这将是一个默认设置而不需要激活)也不是必需的。通常,在使用guice时,您希望拥有所有“魔力”来帮助您将应用程序粘合在一起。所以默认行为是:不要求explicitBindings。 但每隔一段时间,你会注意到guice自动机会妨碍你。在极少数情况下,您将使用require开关。 我没有阅读你提供的整篇文章,所以我不知道他们是否正在处理其中一个“特殊情况”,或者他们只是在没有真正考虑原因的情况下使用旗帜。无论如何,如果你编写绑定模块,就把它留下来。

答案 1 :(得分:1)

我认为这个开关可能非常有用,可以让你更快地编程错误,你错误地注释了一些注入不应该被注入的东西,比如这里:

@Inject
private SomeClass someInstance = new SomeClass(12);

如果SomeClass现在也有一个公共的无参数构造函数,Guice只会覆盖特定的实例,而不会说任何东西。

然而,自动注射的有用性通常比这更重要,所以对于这个具体的例子,你必须小心不要意外地“注射一切”:)