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);
}
Java同一个类的不同实例_如何创建2个类实例注入不同类的依赖项实现(通过guice)?...相关推荐
- C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)
C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...
- docx_demos(创建文档类Document及属性方法, 创建段落文本类Paragraph及段落格式设置, 创建字体设置类Run及属性等)
""" docx_demos.py(创建文档类Document及属性方法, 创建段落文本类Paragraph及段落格式设置, 创建字体设置类Run及属性等)使用:一.创建 ...
- 在python中、实例变量在类的内部通过_【python】类变量、实例变量
1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量 ...
- python类的构造方法名称_搞懂Python的类和对象名称空间
代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层函 ...
- matlab迭代算法实例_智能优化算法及其MATLAB实例-免疫算法笔记
一.概念 1.Immune Algorithm, IA 免疫算法 (1)其仿照生物的免疫系统,是一个复杂的自适应系统: 其相关概念有: 免疫 抗原 抗体 T细胞和B细胞 其生物免疫系统的机理为:免疫识 ...
- Python实例练习:创建和使用类
创建和使用类: 1.创建 Restaurant 的类,其方法 __init__() 设置两个属性:restaurant_name 和 cuisine_type . 2.创建 describe_rest ...
- 定义一个dog类java_JAVA!在线求助!要求创建一个dog类....
JAVA!在线求助!要求创建一个dog类.... 关注:75 答案:6 mip版 解决时间 2021-01-24 07:31 提问者妳有我霸氣嗎 2021-01-23 17:49 编写程序,要求创 ...
- 严重性 代码 说明 项目 文件 行 禁止显示状态 警告 CS8032 无法从...创建分析器...的实例: 未能加载文件或程序集...或它的某一个依赖项。系统找不到指定的文件
错误信息:严重性 代码 说明 项目 文件 行 禁止显示状态 警告 CS8032 无法从 C:\Users\Administrator\Desktop\SVG-master\Generators\bin ...
- mule esb java实例_基于AnypointStudio IDE开发MuleESB实例
基于AnypointStudio IDE开发MuleESB实例 本文部分内容引用https://www.cnblogs.com/enjoyingsoft/p/10132360.html,在此,对原著作 ...
最新文章
- 为什么大公司还在采用过时的技术?
- linux 初始化工作进程 systemd简介
- Leetcode 168. Excel表列名称 解题思路及C++实现
- Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题
- wxpython应用程序对象与顶级窗口_wxPython--学习笔记
- boost::core模块default_allocator
- MySql 事务+异常处理+异常抛出
- 《复杂》读书笔记(part6)--计算机中的自我复制
- 取模除法(逆元)(费马小定理)(线性求逆元)
- OpenMap教程5 – 3层GIS应用程序
- Visual Studio Code使用问题
- 详解TCP协议的服务特点以及连接建立与终止的过程(俗称三次握手四次挥手)
- software engineering homework, product analysis
- laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?
- python数据如何保存到excel中
- python中布尔变量的值为_python 布尔操作实现代码 python是如何定义并使用变量的...
- java parseint(12.0)_java的parseint
- linux编译安装mysql的意思,linux编译模式安装mysql 步骤说明
- 计算机网络hdcp是什么意思,为什么显卡面板显示此显示器不支持HDCP是怎么回事...
- 天猫盒子 显示电脑连接服务器失败,天猫魔盒访问电脑共享文件需要密码的解决方法...
热门文章
- 客快物流大数据项目(四十九):开发环境初始化
- CentOS安装crontab
- java线程触发_java线程
- Android RatingBar
- ClassCastException
- 针对JavaScript的常用事件、对象捕获和使用技巧
- .net2.0网站多语言
- 一分钟了解负载均衡的一切
- PyTorch 笔记(20)— torchvision 的 datasets、transforms 数据预览和加载、模型搭建(torch.nn.Conv2d/MaxPool2d/Dropout)
- bitset类型, 标准库类型