使用 Guice 将特定对象注入特定构造函数
Injecting specific objects into specific constructors with 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;
}
这种方式确实有效,但感觉有点像小 hack,所以我想知道是否有人有更好的解决方案或启发性的东西。
显然可以通过使用工厂来实现干净的、符合 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 处理依赖关系。
我正在构建数量可变的 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;
}
这种方式确实有效,但感觉有点像小 hack,所以我想知道是否有人有更好的解决方案或启发性的东西。
显然可以通过使用工厂来实现干净的、符合 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 处理依赖关系。