Java Guice中的作用域提供程序
范围界定对Guice提供者有效吗?假设我有一个Java Guice中的作用域提供程序,java,guice,Java,Guice,范围界定对Guice提供者有效吗?假设我有一个FooProvider,并像这样绑定: bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST) 每个请求是否会实例化一次FooProvider bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST); 但如果不是这样,这应该可以按预期工作。否,FooProvide
FooProvider
,并像这样绑定:
bind(Foo.class).toProvider(FooProvider.class).inScope(ServletScopes.REQUEST)
每个请求是否会实例化一次FooProvider
bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);
但如果不是这样,这应该可以按预期工作。否,
FooProvider
将由Guice仅实例化一次
作用域应用于绑定,这意味着在您的示例中,如果将Foo
注入到另一个请求作用域对象中,Guice将调用FooProvider.get()
,并将返回的Foo
注入到该原始对象中
如果您希望将范围应用于FooProvider,那么您必须执行类似的操作(注意:我没有检查它,但它应该可以工作):
初始测试表明,这同时作用于提供程序和提供的对象。在大多数情况下,这可能是需要的。
bind(FooProvider.class).in(ServletScopes.REQUEST);
bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);