是否强制/建议使用requireexplicitbindings

dgenwo3n  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(481)

我正在使用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 ...

是强制使用,还是仅仅推荐使用?如果它只是推荐我只是想知道为什么要用它?

ecbunoof

ecbunoof1#

它既不是强制性的(那么这将是无需激活的默认设置),也不是必需的。通常,在使用guice时,您需要所有的“魔力”来帮助您将应用程序粘合在一起。因此默认行为是:不需要显式绑定。但是每隔一段时间,你就会注意到guice的自动功能会妨碍你。在这种罕见的情况下,您会使用require开关。我没有阅读你提供的整篇文章,所以我无法判断他们是在处理这些“特殊情况”中的一个,还是在没有真正考虑原因的情况下使用了一个标志。不管怎样,如果您编写绑定模块,请不要使用它。

zzzyeukh

zzzyeukh2#

我认为这个开关非常有用,可以让您更快地发现编程错误,错误地将某些内容注解为不应注入的可注入内容,如下所示:

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

如果someclass现在也有一个公共的无参数构造函数,guice只会覆盖特定的示例而不说任何东西。
然而,自动注入的实用性通常要比这个重要得多,因此对于这个特定的示例,您只需小心不要意外地“注入所有内容:)

相关问题