Last active
January 4, 2024 16:03
-
-
Save wendigo/875bda095ee7161b036b37d970293bf4 to your computer and use it in GitHub Desktop.
Named Guice bindings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.google.common.base.MoreObjects; | |
import com.google.inject.Binder; | |
import com.google.inject.ConfigurationException; | |
import com.google.inject.Inject; | |
import com.google.inject.Injector; | |
import com.google.inject.Key; | |
import com.google.inject.name.Named; | |
import com.google.inject.name.Names; | |
import io.airlift.bootstrap.Bootstrap; | |
import io.airlift.configuration.AbstractConfigurationAwareModule; | |
import static java.util.Objects.requireNonNull; | |
public class InjectionTest | |
{ | |
public static void main(String[] args) | |
{ | |
Injector injector = new Bootstrap(new MultipleInstancesModule()) | |
.doNotInitializeLogging() | |
.initialize(); | |
System.out.println(injector.getInstance(Key.get(String.class, Names.named("firstInstance")))); | |
try { | |
System.out.println(injector.getInstance(String.class)); // expected to fail | |
} | |
catch (ConfigurationException e) { | |
System.out.println("Could not get unnamed String.class"); | |
} | |
System.out.println(injector.getInstance(Key.get(String.class, Names.named("secondInstance")))); | |
System.out.println(injector.getInstance(Acceptor.class)); | |
} | |
private static class MultipleInstancesModule | |
extends AbstractConfigurationAwareModule | |
{ | |
@Override | |
protected void setup(Binder binder) | |
{ | |
binder.bind(Key.get(String.class, Names.named("firstInstance"))) | |
.toInstance("First instance value"); | |
binder.bind(Key.get(String.class, Names.named("secondInstance"))) | |
.toInstance("Second instance value"); | |
binder.bind(Acceptor.class); | |
} | |
} | |
private static class Acceptor | |
{ | |
private final String value; | |
@Inject | |
public Acceptor(@Named("firstInstance") String value) | |
{ | |
this.value = requireNonNull(value, "value is null"); | |
} | |
@Override | |
public String toString() | |
{ | |
return MoreObjects.toStringHelper(this) | |
.add("value", value) | |
.toString(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment