Google Guice自定义范围

时间:2012-02-24 10:32:11

标签: java dependency-injection guice

只是一个简单的问题,看看我是否正确理解了范围。

我知道范围是控制实例创建的方式/时间。 现在我在一个应用程序中有一个类,我想要它的两个实例;每一个都会注入其他一些实例。

Guice是否可以为每个实例创建两个范围?然后我可以将每个范围实例注入我喜欢的任何其他实例?

1 个答案:

答案 0 :(得分:5)

的范围:

  1. 范围允许您控制对象的生命周期。

  2. 您只能bindScope()一次范围注释。示波器的概念是注入器级:它是接线配置。

  3. 您可以将多个内容(键)绑定到一个范围内。

  4. 您可以根据需要定义任意数量的范围,但每个绑定只能在一个范围内。

  5. 您尚未提供问题的完整详细信息,但根据我的经验,在大多数情况下,自定义范围最初看起来是正确的答案,实际上很少!

    也许你想要的是注释一种类型的两个实例?类似的东西:

    bind(SomeService.class).in(First.class).to(FirstServiceImpl.class);
    bind(SomeService.class).in(Second.class).to(SecondServiceImpl.class);
    

    然后你可以注射你想要的那个:

    @Inject
    SomeConstructor(@First SomeService service) {
    }
    

    或:

    @Inject
    SomeConstructor(@Second SomeService service) {
    }
    

    如果这没有帮助,那么您可能需要提供一些问题的更多细节。