有什么区别
bind(FooImpl.class).in(Scopes.SINGLETON);
bind(Foo.class).to(FooImpl.class);
和
bind(Foo.class).to(FooImpl.class).in(Scopes.SINGLETON);
使用 Google Guice?
编辑:
第二个声明在我正在处理的项目中在 Singleton 上创建两个实例。 参考这里
参考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
在第二种方式中可能有两个实例,但在编写绑定的第一种方式中没有。
没有区别。两者都将绑定到范围内Foo
的实例。FooImpl
SINGLETON