Java同一个类的不同实例_如何创建2个类实例注入不同类的依赖项实现(通过guice)?...

像这样的东西?

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 extends Annotation> annotation;

ConsumerModule(Class extends Annotation> 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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值