我正在使用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条答案
按热度按时间ecbunoof1#
它既不是强制性的(那么这将是无需激活的默认设置),也不是必需的。通常,在使用guice时,您需要所有的“魔力”来帮助您将应用程序粘合在一起。因此默认行为是:不需要显式绑定。但是每隔一段时间,你就会注意到guice的自动功能会妨碍你。在这种罕见的情况下,您会使用require开关。我没有阅读你提供的整篇文章,所以我无法判断他们是在处理这些“特殊情况”中的一个,还是在没有真正考虑原因的情况下使用了一个标志。不管怎样,如果您编写绑定模块,请不要使用它。
zzzyeukh2#
我认为这个开关非常有用,可以让您更快地发现编程错误,错误地将某些内容注解为不应注入的可注入内容,如下所示:
如果someclass现在也有一个公共的无参数构造函数,guice只会覆盖特定的示例而不说任何东西。
然而,自动注入的实用性通常要比这个重要得多,因此对于这个特定的示例,您只需小心不要意外地“注入所有内容:)