Skip to content

Instantly share code, notes, and snippets.

@wendigo
Last active January 4, 2024 16:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wendigo/875bda095ee7161b036b37d970293bf4 to your computer and use it in GitHub Desktop.
Save wendigo/875bda095ee7161b036b37d970293bf4 to your computer and use it in GitHub Desktop.
Named Guice bindings
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