当前位置: 首页 > 知识库问答 >
问题:

如何使用CDI用参数化构造函数注入类的实例(仅限Java EE 6)

傅星光
2023-03-14
    public class A 
    {
        public A(boolean deliverFromLocalWarehouse)
        {
            if(deliverFromLocalWarehouse)
            {
                wareHouseId = new Integer(10); 
            }
            else 
            {
                wareHouseId = new Integer(100);
            }
        }

        public void deliver()
        {
            //get wareHouse address by Id and initiate delivery.   
        }

        private Integer wareHouseId = null;
    }

    public class B 
    {

        @Inject
        private A a;
    }

谢谢Srikrishna Kalavacharla

共有1个答案

华君浩
2023-03-14

如果构造函数参数应该来自一个bean,我认为您可以简单地对其进行注释:

public A(@Inject boolean localWarehouse) { ...

并将其注入

@Inject A a;

如果需要一个的两个不同实例(具有不同的构造函数参数),可以对它们进行子类化:

public AForLocalWarehouse extends A {
    public AForLocalWarehouse() {
        super(true);
    }
}
@Inject AForLocalWarehouse a;
@Produces @LocalWarehouse
public A localWarehouse() { return new A(true); }

@Produces @RemoteWarehouse
public A remoteWarehouse() { return new A(false); }
@Inject @LocalWarehouse A a;
@Inject @RemoteWarehouse A a;
 类似资料:
  • 问题内容: 我已经用策略模式实现了一个程序。所以我有一个在某些地方使用的接口,并且可以替换具体的实现。 现在我要测试该程序。我想以类似的方式做。编写一次测试,针对该接口进行测试。应在测试开始时注入具体的接口实现,以便我可以轻松地替换它。 我的测试类看起来与此类似: 在开始测试时,必须使用参数化的构造器来注入具体的策略实施。 现在我没有让TestNG运行它并注入具体的实现实例。我试图与继承几种方法,

  • 我有一个自定义类,它有一个参数化构造函数 因此,实例化时需要3个参数。如果我想将这个类作为依赖项添加,我发现在Spring中没有直接的方法可以做到这一点。 我知道我可以简单地创建一个类的新实例并使用它的方法。但是我找不到任何直接的方法将这个类注入我的另一个类,即Rest控制器。 需要注意的是:所有3个参数都需要在运行时传递。我不能从属性文件中使用它们 即使Spring中没有直接的方法,我也想知道定

  • 我想把它转换成这样的东西: 这将使类不可变并且更容易进行单元测试。问题是,由于executorService需要通过@Resource注释获得,它似乎不能通过构造函数注入。

  • 我试图弄清楚如何在CDI中使用构造函数注入,其中一个参数是JNDI查找。 用正常的打野,我可以做到以下几点: 如何指定参数是通过JNDI查找检索的bean?在哪里指定JNDI名称?

  • 问题内容: 例如: 清除代码。 但是,如果我添加带有参数的构造函数,则如下所示: 我懂了: 因此,不,我不知道如何通过构造函数传递参数。 请帮忙。 问题答案: 您需要说出您要使用pass it参数的构造函数。

  • 下面是引用的Spring留档的AutoowiredAnnotationBeanPostProc处理器, 任何给定bean类中只有一个构造函数(最大值)可以携带此注释,其中“必需”参数设置为true,指示构造函数在用作Spring bean时自动连接。如果多个非必需的构造函数携带注释,它们将被视为自动连接的候选。将选择具有最多依赖项的构造函数,这些依赖项可以通过匹配Spring容器中的bean来满足