Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非目标绑定与`toInstance()`bind_Java_Dependency Injection_Inversion Of Control_Guice - Fatal编程技术网

Java 非目标绑定与`toInstance()`bind

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() { } 当我跑步时,上述任何一种情况会发生什么 我什么

我是Guice的新手,我不确定我是否理解

1) 无目标绑定-何时需要使用此绑定

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