无目标绑定与`toInstance()`绑定

时间:2014-12-18 06:08:42

标签: java dependency-injection inversion-of-control guice

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

之间的区别

1)无目标绑定 - 我什么时候需要使用它?

bind(Logger.class);

2)' toInstance()`bind - 如何初始化一个具有依赖关系的ctor的对象?或者仅用于没有依赖关系的数据对象?

bind(Logger.class).toInstance(new Logger(..?..));

3)不在

中写任何绑定
    @Override
    protected void configure() {
}

当我运行

时,上述任何一种情况都会发生

什么时候应该选择其中任何一个?

1 个答案:

答案 0 :(得分:4)

  1. 未解决的绑定:您很少需要来使用它们,但如果他们需要
  2. 您是对的,通常您不能将toInstance()用于具有构造函数依赖关系的对象。它对于非Guicey对象(例如您必须使用new创建的数据对象或库类更有用。
  3. 当您注入未在任何Module中绑定的类型时,Guice会为其创建just-in-time binding。该行为几乎与bind(Untargetted.class);
  4. 相同

    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