【问题标题】:Scoped providers in GuiceGuice 中的范围提供程序
【发布时间】:2011-02-22 20:17:23
【问题描述】:

范围界定是否适用于 Guice 提供程序?假设我有一个FooProvider 并像这样绑定:

bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)

FooProvider 会在每个请求中实例化一次吗?

【问题讨论】:

    标签: java guice


    【解决方案1】:

    应该是

    bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);
    

    但否则这应该会按预期工作。

    【讨论】:

    • 初步测试表明,这既适用于提供者,也适用于提供的对象。在大多数情况下,这可能是需要的。
    【解决方案2】:

    不,FooProvider 将由 Guice仅实例化一次

    范围适用于绑定,这意味着在您的示例中,如果 Foo 被注入到另一个 REQUEST 范围的对象中,Guice 将调用 FooProvider.get() 并将返回的 Foo 注入到该原始对象中。

    如果您希望将范围应用于 FooProvider,那么您将不得不做类似的事情(注意:我还没有检查它,但它应该可以工作):

    bind(FooProvider.class).in(ServletScopes.REQUEST);
    bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      • 2013-08-08
      • 2016-07-13
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2019-07-16
      相关资源
      最近更新 更多