Class BoundFieldModule
- java.lang.Object
-
- com.google.inject.testing.fieldbinder.BoundFieldModule
-
- All Implemented Interfaces:
Module
public final class BoundFieldModule extends java.lang.Object implements Module
Automatically creates Guice bindings for fields in an object annotated withBind
.This module is intended for use in tests to reduce the code needed to bind local fields (usually mocks) for injection.
The following rules are followed in determining how fields are bound using this module:
-
For each
Bind
annotated field of an object and its superclasses, this module will bind that field's type to that field's value at injector creation time. This includes both instance and static fields. -
If
Bind.to()
is specified, the field's value will be bound to the class specified byBind.to()
instead of the field's actual type. -
If a
BindingAnnotation
orQualifier
is present on the field, that field will be bound using that annotation viaAnnotatedBindingBuilder.annotatedWith(java.lang.Class<? extends java.lang.annotation.Annotation>)
. For example,bind(Foo.class).annotatedWith(BarAnnotation.class).toInstance(theValue)
. It is an error to supply more than oneBindingAnnotation
orQualifier
. -
If the field is of type
Provider
, the field's value will be bound as aProvider
usingLinkedBindingBuilder.toProvider(com.google.inject.Provider<? extends T>)
to the provider's parameterized type. For example,Provider<Integer>
binds toInteger
. Attempting to bind a non-parameterizedProvider
without aBind.to()
clause is an error.
Example use:
public class TestFoo { // bind(new TypeLiteral
<List<Object>>
() {}).toInstance(listOfObjects); @Bind private List<Object>
listOfObjects = Lists.of(); // bind(String.class).toProvider(new Provider() { public String get() { return userName; }}); @Bind(lazy = true) private String userName; // bind(SuperClass.class).toInstance(aSubClass); @Bind(to = SuperClass.class) private SubClass aSubClass = new SubClass(); // bind(String.class).annotatedWith(MyBindingAnnotation.class).toInstance(myString); @Bind @MyBindingAnnotation private String myString = "hello"; // bind(Object.class).toProvider(myProvider); @Bind private Provider<Object>
myProvider = getProvider(); @Before public void setUp() { Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); } }- See Also:
Bind
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
configure(Binder binder)
Contributes bindings and other configurations for this module tobinder
.static BoundFieldModule
of(java.lang.Object instance)
Create a BoundFieldModule which binds theBind
annotated fields ofinstance
.
-
-
-
Method Detail
-
of
public static BoundFieldModule of(java.lang.Object instance)
Create a BoundFieldModule which binds theBind
annotated fields ofinstance
.- Parameters:
instance
- the instance whose fields will be bound.- Returns:
- a module which will bind the
Bind
annotated fields ofinstance
.
-
configure
public void configure(Binder binder)
Description copied from interface:Module
Contributes bindings and other configurations for this module tobinder
.Do not invoke this method directly to install submodules. Instead use
Binder.install(Module)
, which ensures thatprovider methods
are discovered.
-
-