2

有什么区别

bind(FooImpl.class).in(Scopes.SINGLETON);
bind(Foo.class).to(FooImpl.class);

bind(Foo.class).to(FooImpl.class).in(Scopes.SINGLETON);

使用 Google Guice?

编辑:

第二个声明在我正在处理的项目中在 Singleton 上创建两个实例。 参考这里

4

2 回答 2

3

参考Google Guice 文档:

在链接绑定中,范围适用于绑定源,而不是绑定目标。假设我们有一个 Applebees 类,它同时实现了 Bar 和 Grill 接口。这些绑定允许该类型的两个实例,一个用于 Bars,另一个用于 Grills:

bind(Bar.class).to(Applebees.class).in(Singleton.class);
bind(Grill.class).to(Applebees.class).in(Singleton.class);

这是因为范围适用于绑定类型(Bar、Grill),而不是满足该绑定的类型(Applebees)。要仅允许创建单个实例,请在@Singleton该类的声明上使用注释。或者添加另一个绑定:

bind(Applebees.class).in(Singleton.class);

因此,FooImpl在第二种方式中可能有两个实例,但在编写绑定的第一种方式中没有。

于 2012-06-12T19:25:30.953 回答
0

没有区别。两者都将绑定到范围内Foo的实例。FooImplSINGLETON

于 2012-06-12T18:56:07.067 回答