使用Guice将特定对象注入特定构造函数

时间:2018-06-13 12:52:38

标签: java singleton guice

我正在构建可变数量的KlasseA对象和相应数量的KlasseB对象。

KlasseA依赖于ClassZ和ClassY,KlasseB依赖于ClassZ,ClassY和KlasseA。 KlasseA& KlasseB必须使用相同的ClassY实例,因为它具有必须由两个类使用的外部连接。但是,当我创建另一对KlasseA& KlasseB对象都必须使用ClassY的新实例,因为它们可能不会使用与其他2 KlasseA& KlasseB对象。

到目前为止,我已经使用Guice来注入依赖项,但是由于Guice要么总是创建一个新的ClassY实例,要么只创建一个实例,如果我将它作为单例,它实际上并不像我想的那样工作。

现在我想知道是否有可能与Guice这样做,或者我是否应该采取不同的方法,例如

@Inject
public KlasseA(ClassZ classZ, ClassY classY)
{
    classZ = classZ;
    classY = classY;
}

@Inject
public KlasseB(ClassZ classZ, KlasseA klasseA)
{
    classZ = classZ;
    classY = klasseA.getClassY();
    klasseA = klasseA;
}

这种方式肯定有效,但它有点像一个小黑客,所以我想知道是否有人有更好的解决方案或鼓舞人心的东西。

1 个答案:

答案 0 :(得分:0)

显然,通过使用工厂可以实现干净,符合Guice的解决方案

@Inject
public KlasseA(ClassZ classZ, ClassY classY)
{
    classZ = classZ;
    classY = classY;
}

@Inject
public KlasseB(ClassZ classZ, KlasseA klasseA, @Assisted ClassYFactory classyFactory)
{
    classZ = classZ;
    classY = classyFactory.create(klasseA);
    klasseA = klasseA;
}

所以仍然是Guice处理依赖。