gpt4 book ai didi

java - 我如何将参数传递给 Java 中的可注入(inject)构造函数?

转载 作者:行者123 更新时间:2023-12-04 14:23:48 24 4
gpt4 key购买 nike

我使用手动依赖注入(inject)已有一段时间了,我开始研究来自 javax (JSR330) 的 @Inject 注释。

Si 我有这样的事情:

public class MyClass {
public MyClass(DepA depA, DepB depB) {
this.depA = depA;
this.depB = depB;
}
}

为了使用它,我是这样实例化它的:

public void myMethod() {
DepA depA = new DepA();
DepB depB = new DepB();
MyClass myClass = new MyClass(depA, depB);
}

但是,当我的依赖项具有依赖项时,它开始变得困惑,所以我阅读了一些内容并接受了这个(每个人似乎都同意可注入(inject)构造函数是最佳实践):

public class MyClass {
public MyClass() {}

@Inject
public MyClass(DepA depA, DepB depB) {
this.depA = depA;
this.depB = depB;
}
}

然后像这样使用它:

public void myMethod() {
MyClass myClass = new MyClass();
}

这似乎很有魅力,但缺少一个用例,我找不到答案:如果我想注入(inject)依赖项使用真实 我的构造函数中的参数?

例如,这样的事情是否可能:

public class MyClass {
public MyClass(String aContextualValue) {}

@Inject
public MyClass(DepA depA, DepB depB, String aContextualValue) {
this.depA = depA;
this.depB = depB;
this.aContextualValue = this.aContextualValue;
}
}

最佳答案

如果(如您在评论中所说)aContextualValue 来自用户,则您无法真正注入(inject)它。所以你不能完全让 DI 容器管理 MyClass

您可以做的是实现类似 MyClassFactory 的东西,它会为您生成 MyClass

类似于:

public class MyClassFactory {

private final DepA depA;
private final DepB depB;

public MyClassFactory(DepA depA, DepB depB) {
this.depA = depA;
this.depB = depB;
}

public MyClass createMyClass(String aContextualValue) {
return new MyClass(this.depA, this.depB, aContextualValue);
}
}

关于java - 我如何将参数传递给 Java 中的可注入(inject)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49967074/

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