是否强制/推荐使用 requireExplicitBindings?

6

我正在使用guice,看到一个示例在使用binder().requireExplicitBindings(),链接在这里
示例代码如下:

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个回答

4

这不是必须的(否则这将是一个默认设置,无需激活)也不是必需的。通常在使用guice时,您希望拥有所有的“魔力”来帮助您将应用程序粘合在一起。因此,默认行为是:不需要显式绑定。但是偶尔会发现guice自动化会妨碍您。在那些罕见的场合,您可以使用require开关。我没有完全阅读您提供的整篇文章,因此我不能确定他们是否处理其中的一个“特殊情况”,或者他们只是使用标志而没有真正考虑为什么要这样做。无论如何,如果您编写绑定模块,请将其省略。


2
我认为这个开关可以很有用,可以更快地指出编程错误,如错误注释成可注入的内容,例如:
@Inject
private SomeClass someInstance = new SomeClass(12);

如果SomeClass现在也有一个公共的无参构造函数,Guice将会在不做任何提示的情况下覆盖特定实例。
然而,自动注入的实用性通常比这更重要,所以对于这个特定的示例,您只需要小心不要意外地“注入所有内容” :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接