我有一个基于 guice 的应用程序,现在需要给定类型的多个实例,因此我计划使用命名注释来消除依赖关系。但是,这种类型的依赖项也需要根据我得到的依赖项而有所不同。
为了说明让我们说我有
@Singleton
public class FooCache {
private final FooCacheListener listener;
@Inject
public FooCache(FooCacheListener listener) {
this.listener = listener;
}
// do stuff
}
然后假设我需要 2 个单独的实例,所以我可能需要
@ThatOne FooCache
在一个班级和
@ThisOne FooCache
在另一个。
现在假设我在每种情况下都需要一个不同的侦听器(可能一个将某些内容写入数据库,另一个通过 JMS 或某个分布式缓存发送通知)。我该怎么做?我看不到我可以在 FooCacheListener 上粘贴一个名称,因为在一种情况下我需要一个不同的名称,而我这里只有一个地方。我能想到的唯一方法是继承 FooCache ,但这对我来说似乎是一种非常笨拙的方法。
干杯马特