我正在使用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 ...
是否必须使用它,或者只是推荐使用它?如果它只是推荐我只是想知道为什么要使用它?
答案 0 :(得分:3)
它既不是强制性的(那么这将是一个默认设置而不需要激活)也不是必需的。通常,在使用guice时,您希望拥有所有“魔力”来帮助您将应用程序粘合在一起。所以默认行为是:不要求explicitBindings。 但每隔一段时间,你会注意到guice自动机会妨碍你。在极少数情况下,您将使用require开关。 我没有阅读你提供的整篇文章,所以我不知道他们是否正在处理其中一个“特殊情况”,或者他们只是在没有真正考虑原因的情况下使用旗帜。无论如何,如果你编写绑定模块,就把它留下来。
答案 1 :(得分:1)
我认为这个开关可能非常有用,可以让你更快地编程错误,你错误地注释了一些注入不应该被注入的东西,比如这里:
@Inject
private SomeClass someInstance = new SomeClass(12);
如果SomeClass现在也有一个公共的无参数构造函数,Guice只会覆盖特定的实例,而不会说任何东西。
然而,自动注射的有用性通常比这更重要,所以对于这个具体的例子,你必须小心不要意外地“注射一切”:)