像这样的东西?

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);

}

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

  1. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  2. docx_demos(创建文档类Document及属性方法, 创建段落文本类Paragraph及段落格式设置, 创建字体设置类Run及属性等)

    """ docx_demos.py(创建文档类Document及属性方法, 创建段落文本类Paragraph及段落格式设置, 创建字体设置类Run及属性等)使用:一.创建 ...

  3. 在python中、实例变量在类的内部通过_【python】类变量、实例变量

    1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量 ...

  4. python类的构造方法名称_搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层函 ...

  5. matlab迭代算法实例_智能优化算法及其MATLAB实例-免疫算法笔记

    一.概念 1.Immune Algorithm, IA 免疫算法 (1)其仿照生物的免疫系统,是一个复杂的自适应系统: 其相关概念有: 免疫 抗原 抗体 T细胞和B细胞 其生物免疫系统的机理为:免疫识 ...

  6. Python实例练习:创建和使用类

    创建和使用类: 1.创建 Restaurant 的类,其方法 __init__() 设置两个属性:restaurant_name 和 cuisine_type . 2.创建 describe_rest ...

  7. 定义一个dog类java_JAVA!在线求助!要求创建一个dog类....

    JAVA!在线求助!要求创建一个dog类.... 关注:75  答案:6  mip版 解决时间 2021-01-24 07:31 提问者妳有我霸氣嗎 2021-01-23 17:49 编写程序,要求创 ...

  8. 严重性 代码 说明 项目 文件 行 禁止显示状态 警告 CS8032 无法从...创建分析器...的实例: 未能加载文件或程序集...或它的某一个依赖项。系统找不到指定的文件

    错误信息:严重性 代码 说明 项目 文件 行 禁止显示状态 警告 CS8032 无法从 C:\Users\Administrator\Desktop\SVG-master\Generators\bin ...

  9. mule esb java实例_基于AnypointStudio IDE开发MuleESB实例

    基于AnypointStudio IDE开发MuleESB实例 本文部分内容引用https://www.cnblogs.com/enjoyingsoft/p/10132360.html,在此,对原著作 ...

最新文章

  1. 为什么大公司还在采用过时的技术?
  2. linux 初始化工作进程 systemd简介
  3. Leetcode 168. Excel表列名称 解题思路及C++实现
  4. Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题
  5. wxpython应用程序对象与顶级窗口_wxPython--学习笔记
  6. boost::core模块default_allocator
  7. MySql 事务+异常处理+异常抛出
  8. 《复杂》读书笔记(part6)--计算机中的自我复制
  9. 取模除法(逆元)(费马小定理)(线性求逆元)
  10. OpenMap教程5 – 3层GIS应用程序
  11. Visual Studio Code使用问题
  12. 详解TCP协议的服务特点以及连接建立与终止的过程(俗称三次握手四次挥手)
  13. software engineering homework, product analysis
  14. laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?
  15. python数据如何保存到excel中
  16. python中布尔变量的值为_python 布尔操作实现代码 python是如何定义并使用变量的...
  17. java parseint(12.0)_java的parseint
  18. linux编译安装mysql的意思,linux编译模式安装mysql 步骤说明
  19. 计算机网络hdcp是什么意思,为什么显卡面板显示此显示器不支持HDCP是怎么回事...
  20. 天猫盒子 显示电脑连接服务器失败,天猫魔盒访问电脑共享文件需要密码的解决方法...

热门文章

  1. 客快物流大数据项目(四十九):开发环境初始化
  2. CentOS安装crontab
  3. java线程触发_java线程
  4. Android RatingBar
  5. ClassCastException
  6. 针对JavaScript的常用事件、对象捕获和使用技巧
  7. .net2.0网站多语言
  8. 一分钟了解负载均衡的一切
  9. PyTorch 笔记(20)— torchvision 的 datasets、transforms 数据预览和加载、模型搭建(torch.nn.Conv2d/MaxPool2d/Dropout)
  10. bitset类型, 标准库类型