Class BoundFieldModule

  • All Implemented Interfaces:
    Module

    public final class BoundFieldModule
    extends Object
    implements Module
    A Guice module that automatically adds Guice bindings into the injector for all Bind annotated fields of a specified object.

    This module is intended for use in tests to reduce the amount of boilerplate code needed to bind local fields (usually mocks) for injection.

    The following rules are followed in determining how fields are bound using this module:

    Example use:

    
     public class TestFoo {
       // bind(new TypeLiteral<List<Object>>() {}).toInstance(listOfObjects);
       @Bind private List<Object> listOfObjects = Lists.of();
    
       // private String userName = "string_that_changes_over_time";
       // 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 Detail

      • of

        public static BoundFieldModule of​(Object instance)
        Create a BoundFieldModule which binds the Bind annotated fields of instance.
        Parameters:
        instance - the instance whose fields will be bound.
        Returns:
        a module which will bind the Bind annotated fields of instance.
      • getBoundFields

        public ImmutableSet<BoundFieldModule.BoundFieldInfo> getBoundFields()
        Returns information about the fields bound by this module.

        Note this is available immediately after construction, fields with errors won't be included but their error messages will be deferred to configuration time.

        Fields with invalid null values are included but still cause errors at configuration time.