Skip to content

UntargettedBindings

Googler edited this page Mar 26, 2024 · 9 revisions

Untargeted Bindings

Creating bindings that don't have targets

You may create bindings without specifying a target. This is most useful for concrete classes and types annotated by either @ImplementedBy or @ProvidedBy. An untargeted binding informs the injector about a type, so it may prepare dependencies eagerly. Untargeted 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 if 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