Skip to content

UntargettedBindings

Googler edited this page Mar 9, 2020 · 9 revisions

Creating bindings that don't have targets

Untargeted Bindings

You may create bindings without specifying a target. This is most useful for concrete classes and types annotated by either @ImplementedBy or @ProvidedBy. An untargetted binding informs the injector about a type, so it may prepare dependencies eagerly. Untargetted bindings have no to clause, like so:

    bind(MyConcreteClass.class);
    bind(AnotherConcreteClass.class).in(Singleton.class);

When specifying binding annotations, you must still add the target binding, even it is the same concrete class. For example:

    bind(MyConcreteClass.class)
        .annotatedWith(Names.named("foo"))
        .to(MyConcreteClass.class);
    bind(AnotherConcreteClass.class)
        .annotatedWith(Names.named("foo"))
        .to(AnotherConcreteClass.class)
        .in(Singleton.class);

Untargeted bindings are often used to register a type in a Module to ensure that Guice is aware of the type. Registering those types is required to make them eligible for injection when JIT is disabled.

Clone this wiki locally