Java 非目标绑定与`toInstance()`bind
我是Guice的新手,我不确定我是否理解 1) 无目标绑定-何时需要使用此绑定Java 非目标绑定与`toInstance()`bind,java,dependency-injection,inversion-of-control,guice,Java,Dependency Injection,Inversion Of Control,Guice,我是Guice的新手,我不确定我是否理解 1) 无目标绑定-何时需要使用此绑定 bind(Logger.class); 2)“toInstance()”绑定-如何初始化具有依赖项的对象?还是只针对没有依赖关系的数据对象 bind(Logger.class).toInstance(new Logger(..?..)); 3) 没有在文件中写任何绑定 @Override protected void configure() { } 当我跑步时,上述任何一种情况会发生什么 我什么
bind(Logger.class);
2)“toInstance()”绑定-如何初始化具有依赖项的对象?还是只针对没有依赖关系的数据对象
bind(Logger.class).toInstance(new Logger(..?..));
3) 没有在文件中写任何绑定
@Override
protected void configure() {
}
当我跑步时,上述任何一种情况会发生什么
我什么时候该选一个呢
- 您想指定一个作用域(
,例如)bind(untargeted.class).in(Scopes.SINGLETON);
- 您希望将绑定保持在
- 你有
toInstance()
。对于非Guicey对象(如必须使用new
创建的数据对象或库类),它更有用模块中的类型时,Guice会为它创建一个绑定。行为几乎与bind(untargeted.class)相同代码>
toInstance()
绑定之间的主要区别在于toInstance()
绑定将是单例的(“显然”--只有一个实例!),但与大多数其他绑定一样,非目标绑定在默认情况下没有作用域。因此,如果不同的类注入一个非目标的,
,它们将获得不同的实例,除非您在其上设置范围
另一个区别是,当您不使用toInstance()
时,Guice会为您创建实例,并启用以下功能
通常,您不应该使用toInstance()
绑定,除非您必须这样做。非目标绑定的优点是更显式,但将它们全部列出可能会很冗长,因此通常使用即时绑定。特别是在这种情况下:
bind(Interface.class)
.to(Implementation.class);
// Technically, Guice creates a just-in-time binding for Implementation here