gpt4 book ai didi

java - Guice 中的可选注入(inject)

转载 作者:搜寻专家 更新时间:2023-11-01 01:07:47 26 4
gpt4 key购买 nike

是否可以告诉 Guice 不必注入(inject)所有构造函数参数?例如,我有一个构造函数 Foo,它接受两个类型为 BarBaz 的参数。它们在我的系统中都是可选的:它们可能

  1. 都在场
  2. 都失踪了
  3. 只有 Bar 存在
  4. 只有 Baz 在场。

也就是说,它取决于提供这些绑定(bind)的其他模块。我想得到这样的东西:

class Foo {
private final Bar bar;
private final Baz baz;

@Inject(optional = true)
public Foo(@Nullable Bar bar, @Nullable Baz baz) {
this.bar = bar;
this.baz = baz;
}
}

但我真的不能将optional 与构造函数一起使用。有办法吗?

最佳答案

我认为 preferred Guice pattern这是:

public class HolderPatter {

static class Bar {
@Inject Bar(BarDependency dependency) {}
}
static class Baz {
@Inject Baz(BazDependency dependency) {}
}

static class BarHolder {
@Inject(optional=true) Bar value = null;
}

static class BazHolder {
@Inject(optional=true) Baz value = null;
}

static class Foo {
private final Bar bar;
private final Baz baz;

@Inject
public Foo(BarHolder bar, BazHolder baz) {
this.bar = bar.value;
this.baz = baz.value;
}
}
}

请注意,这还允许您指定合理的默认值...

关于java - Guice 中的可选注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29156604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com