我已经使用手动依赖注入有一段时间了,最近开始研究javax(JSR330)中的@Inject注解。
所以我有这样的代码:
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);
}
然而,当我的依赖项有依赖项时,情况开始变得混乱,所以我阅读了一些资料并采用了这种方法(似乎每个人都认为可注入的构造函数是最佳实践):
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();
}
这似乎非常好用,但是有一个缺少的应用场景,我找不到答案:如果我想在我的构造函数中注入依赖项并使用实际参数怎么办?例如,是否可能像这样:
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;
}
}
MyClass
由DI管理,那么aContextualValue
会从哪里来? - lexicoreaContextualValue
是从哪里来的?你是从某个配置文件中读取它还是从用户那里获取的? - lexicoreaContextualValue
将来自用户,那么如何由 DI 容器进行管理? - lexicore