No, FooProvider will be created by Guice only once .
The scope is applied to the binding, which means in your example that if Foo is injected into another object with a REQUEST request, Guice will call FooProvider.get() and inject the returned Foo into this source object.
If you want the scope to apply to FooProvider, you would need to do something like this (NB: I haven't tested it, but it should work):
bind(FooProvider.class).in(ServletScopes.REQUEST); bind(Foo.class).toProvider(FooProvider.class).in(ServletScopes.REQUEST);
source share