范围界定对Guice提供者有效吗?假设我有一个FooProvider并像这样绑定:

bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)
每个请求都会实例化FooProvider吗?

最佳答案

否,Guice 只会实例化一次FooProvider

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

如果要将范围应用于FooProvider,则必须做类似的事情(注意:我没有检查过,但是应该可以):

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

09-11 17:58