这两个绑定声明与Google Guice有什么区别?

时间:2012-06-12 18:50:57

标签: java guice

之间有什么区别
bind(FooImpl.class).in(Scopes.SINGLETON);
bind(Foo.class).to(FooImpl.class);

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

使用Google Guice?

修改

第二个声明在我正在处理的项目中在Singleton上创建两个实例。 Reference here

2 个答案:

答案 0 :(得分:3)

reference到Google Guice文档中:

  

在链接绑定中,范围适用于绑定源,而不是   绑定目标。假设我们有一个实现两者的Applebees类   酒吧和烧烤界面。这些绑定允许两个实例   那个类型,一个用于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的两个实例,但第一种方式不是第一种方式。

答案 1 :(得分:0)

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