Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Guice将特定对象注入特定构造函数_Java_Singleton_Guice - Fatal编程技术网

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

Java 使用Guice将特定对象注入特定构造函数,java,singleton,guice,Java,Singleton,Guice,我正在构造数量可变的KlasseA对象和相应数量的KlasseB对象 KlasseA依赖于ClassZ和ClassY,KlasseB依赖于ClassZ、ClassY和KlasseA。KlasseA和KlasseB必须使用ClassY的同一个实例,因为它有一个外部连接,两个类都必须使用它。但是,当我创建另一对KlasseA和KlasseB对象时,它们都必须使用ClassY的新实例,因为它们可能不会使用与其他两个KlasseA和KlasseB对象相同的连接 到目前为止,我已经使用Guice来注入依赖

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

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

到目前为止,我已经使用Guice来注入依赖项,但是由于Guice总是会创建ClassY的新实例,或者如果我将其设置为singleton,则只创建一个实例,因此它并没有真正按照我的预期工作

现在我想知道是否有可能使用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;
}

这种方法确实有效,但感觉有点像是一种小技巧,所以我想知道是否有人有更好的解决方案或鼓舞人心的东西。

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

@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处理依赖关系