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

2024-04-29

有什么区别

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

and

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

与谷歌Guice?

edit:

第二个声明在我正在处理的项目中的 Singleton 上创建了两个实例。参考这里 https://stackoverflow.com/questions/11001920/why-there-is-two-instances-of-a-singleton-with-google-guice-dependency-injection


In 参考 http://code.google.com/p/google-guice/wiki/Scopes到 Google Guice 文档:

在链接绑定中,范围适用于绑定源,而不是绑定源 绑定目标。假设我们有一个 Applebees 类,它同时实现了 酒吧和烧烤界面。这些绑定允许两个实例 那种类型,一种用于酒吧,另一种用于烧烤:

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以第二种方式但不以第一种方式编写绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这两个绑定声明与 Google Guice 有什么区别? 的相关文章

随机推荐