Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Something like this?</p> <pre class="lang-java prettyprint-override"><code>public class GuiceDependencyExample { static class DBManager {} static class DBManagerVendor1 extends DBManager {} static class DBManagerVendor2 extends DBManager {} static interface Consumer { DBManager getDbManager(); } static @Retention(RetentionPolicy.RUNTIME) @BindingAnnotation @interface DBManager1 {} static @Retention(RetentionPolicy.RUNTIME) @BindingAnnotation @interface DBManager2 {} static class ConsumerImpl implements Consumer { DBManager m_dbm; @Inject public ConsumerImpl (DBManager dbm) { m_dbm = dbm; } public DBManager getDbManager() { return m_dbm; } } static abstract class ConsumerModule extends PrivateModule { private final Class&lt;? extends Annotation&gt; annotation; ConsumerModule(Class&lt;? extends Annotation&gt; annotation) { this.annotation = annotation; } @Override protected void configure() { bind(Consumer.class).annotatedWith(annotation).to(ConsumerImpl.class); expose(Consumer.class).annotatedWith(annotation); bindDbManager(); } abstract void bindDbManager(); } static class Client { @DBManager1 @Inject Consumer consumer1; @DBManager2 @Inject Consumer consumer2; } @Test public void test() { Injector i = Guice.createInjector( new ConsumerModule(DBManager1.class) { @Override void bindDbManager() { bind(DBManager.class).toInstance(new DBManagerVendor1()); } }, new ConsumerModule(DBManager2.class) { @Override void bindDbManager() { bind(DBManager.class).toInstance(new DBManagerVendor2()); } }); Client client = i.getInstance(Client.class); assertTrue(client.consumer1.getDbManager() instanceof DBManagerVendor1); assertTrue(client.consumer2.getDbManager() instanceof DBManagerVendor2); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload