我是Guice的新手,我不确定我是否理解
之间的区别1)无目标绑定 - 我什么时候需要使用它?
bind(Logger.class);
2)' toInstance()`bind - 如何初始化一个具有依赖关系的ctor的对象?或者仅用于没有依赖关系的数据对象?
bind(Logger.class).toInstance(new Logger(..?..));
3)不在
中写任何绑定 @Override
protected void configure() {
}
当我运行
时,上述任何一种情况都会发生什么时候应该选择其中任何一个?
答案 0 :(得分:4)
bind(Untargetted.class).in(Scopes.SINGLETON);
)PrivateModule
toInstance()
用于具有构造函数依赖关系的对象。它对于非Guicey对象(例如您必须使用new
创建的数据对象或库类更有用。Module
中绑定的类型时,Guice会为其创建just-in-time binding。该行为几乎与bind(Untargetted.class);
untarsgetted和toInstance()
绑定之间的主要区别在于toInstance()
绑定将是单例("显然" - 那里只有一个实例!),但是没有问题与大多数其他绑定一样,绑定默认情况下没有作用域。因此,如果不同的类注入Untargetted
,他们将获得不同的实例,除非您在其上放置范围。
另一个区别是,当您不使用toInstance()
时,Guice会为您创建实例,启用aspect-oriented programming之类的内容。
通常,除非必须,否则您不应使用toInstance()
绑定。 Untargetted绑定具有更明确的优点,但是将它们全部列出可能很冗长,因此通常使用即时绑定。特别是在这样的情况下:
bind(Interface.class)
.to(Implementation.class);
// Technically, Guice creates a just-in-time binding for Implementation here