【发布时间】:2011-02-22 20:17:23
【问题描述】:
范围界定是否适用于 Guice 提供程序?假设我有一个FooProvider 并像这样绑定:
bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)
FooProvider 会在每个请求中实例化一次吗?
【问题讨论】:
范围界定是否适用于 Guice 提供程序?假设我有一个FooProvider 并像这样绑定:
bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)
FooProvider 会在每个请求中实例化一次吗?
【问题讨论】:
应该是
bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);
但否则这应该会按预期工作。
【讨论】:
不,FooProvider 将由 Guice仅实例化一次。
范围适用于绑定,这意味着在您的示例中,如果 Foo 被注入到另一个 REQUEST 范围的对象中,Guice 将调用 FooProvider.get() 并将返回的 Foo 注入到该原始对象中。
如果您希望将范围应用于 FooProvider,那么您将不得不做类似的事情(注意:我还没有检查它,但它应该可以工作):
bind(FooProvider.class).in(ServletScopes.REQUEST);
bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);
【讨论】: