首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中将参数传递给可注入的构造函数?

如何在Java中将参数传递给可注入的构造函数?
EN

Stack Overflow用户
提问于 2018-04-22 14:34:07
回答 1查看 1K关注 0票数 3

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

我有过这样的事情:

代码语言:javascript
复制
public class MyClass {
    public MyClass(DepA depA, DepB depB) {
        this.depA = depA;
        this.depB = depB;
    }
}

为了使用它,我实例化它如下:

代码语言:javascript
复制
public void myMethod() {
    DepA depA = new DepA();
    DepB depB = new DepB();
    MyClass myClass = new MyClass(depA, depB);
}

但是,当我的依赖项有依赖项时,它就会变得很混乱,所以我读了一些,并使用了这一点(似乎每个人都同意,可注入的构造函数是最佳实践):

代码语言:javascript
复制
public class MyClass {
    public MyClass() {}

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

然后像这样使用它:

代码语言:javascript
复制
public void myMethod() {
    MyClass myClass = new MyClass();
}

这看起来像一种魅力,但是缺少一个用例,我找不到答案:如果我想在构造函数中注入依赖项使用一个真正的参数怎么办?

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

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-22 20:01:08

如果(如您在注释中所述) aContextualValue来自用户,则不能真正注入它。因此,您不能完全让DI容器管理MyClass

相反,您可以实现类似于MyClassFactory的东西,这将为您生成MyClasses。

类似于:

代码语言:javascript
复制
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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49967074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档