首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非目标绑定与“`toInstance()”绑定

非目标绑定与“`toInstance()”绑定
EN

Stack Overflow用户
提问于 2014-12-18 06:08:41
回答 1查看 2.2K关注 0票数 3

我刚认识盖斯,我不太明白

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

代码语言:javascript
复制
bind(Logger.class);

2)‘toInstance()’bind --如何使具有ctor的对象具有依赖关系?或者它是否适用于没有依赖项的数据对象?

代码语言:javascript
复制
bind(Logger.class).toInstance(new Logger(..?..));

3)不写任何约束。

代码语言:javascript
复制
    @Override
    protected void configure() {
}

当我运行时,上面的任何一处发生了什么?

我什么时候应该选择他们中的任何一个?

EN

回答 1

Stack Overflow用户

发布于 2014-12-19 05:02:52

  1. 非目标绑定:您很少需要使用它们,但是如果的话,它们是必要的

  1. 您说得对,通常不能对具有构造函数依赖关系的对象使用toInstance()。对于非Guicey对象,比如必须用new创建的数据对象或库类,它更有用。
  2. 当注入没有绑定到任何Module中的类型时,Guice会为它创建一个即时绑定。这种行为几乎与bind(Untargetted.class);完全相同

非目标绑定和toInstance()绑定的主要区别在于,toInstance()绑定将是单个绑定(“显然”--只有一个实例!),但是与大多数其他绑定一样,非目标绑定默认没有作用域。因此,如果不同的类注入一个Untargetted,它们将得到不同的实例,除非您在其上设置一个作用域。

另一个不同之处是,当您不使用toInstance()时,Guice会为您创建实例,从而启用像面向方面的编程这样的功能。

通常,除非有必要,否则您应该不使用toInstance()绑定。非目标绑定具有更显式的优点,但是列出所有绑定都是冗长的,因此经常使用即时绑定。特别是在这种情况下:

代码语言:javascript
复制
bind(Interface.class)
        .to(Implementation.class);

// Technically, Guice creates a just-in-time binding for Implementation here
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27540204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档