Dependency injection Guice:根据所有者被注入的方式改变注入的类型
我有一个基于guice的应用程序,现在需要给定类型的多个实例,因此我计划使用命名注释来消除依赖关系的歧义。然而,这种类型的依赖项也需要根据我得到的依赖项而有所不同 为了举例说明,让我们假设我有Dependency injection Guice:根据所有者被注入的方式改变注入的类型,dependency-injection,guice,Dependency Injection,Guice,我有一个基于guice的应用程序,现在需要给定类型的多个实例,因此我计划使用命名注释来消除依赖关系的歧义。然而,这种类型的依赖项也需要根据我得到的依赖项而有所不同 为了举例说明,让我们假设我有 @Singleton public class FooCache { private final FooCacheListener listener; @Inject public FooCache(FooCacheListener listener) { thi
@Singleton
public class FooCache {
private final FooCacheListener listener;
@Inject
public FooCache(FooCacheListener listener) {
this.listener = listener;
}
// do stuff
}
然后假设我需要两个单独的实例,所以我可能需要
@ThatOne FooCache
一堂课
@ThisOne FooCache
另一方面
现在让我们假设我在每种情况下都需要一个不同的侦听器(可能一个向数据库写入内容,另一个通过JMS或某个分布式缓存发送通知)。我该怎么做?我看不出我能在FooCacheListener上粘贴一个名字,因为我在一种情况下需要一个不同的名字,而我在这里只有一个地方。我能想到的唯一方法是将FooCache子类化,但对我来说,这似乎是一种非常笨拙的方法
干杯
Matt您可能可以使用PrivateModules。转到并向下滚动到如何构建两个相似但略有不同的对象树?这是一种在同一个类中创建两个不同实例的方法,这听起来几乎正是您想要做的。您可以传入缓存侦听器,而不是示例中传入的“lefty”和“righty”。 如果它看起来像你想要的,那么这里会有更多详细信息的链接
另一种选择可能是注入工厂,这也在上面的链接中讨论过,在问题如何通过Guice创建对象时传递参数?不知为什么我在文档中遗漏了这一点,这就是我要寻找的。谢谢