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

标签 dependency-injection java-ee-6 cdi

我是 CDI 的新手,尝试搜索用法,找不到任何东西,所以发布了问题。我试图弄清楚如何仅使用 CDI 注入(inject)带有参数化构造函数的类的实例。我没有使用 Spring,所以它在 spring 中是如何完成的并没有帮助。这是我创建的示例,用于说明问题所在。我的@Inject 在这种情况下不起作用。

    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;
    }

谢谢 斯里克里希纳卡拉瓦查拉

最佳答案

如果构造函数参数应该来自一个bean,我想你可以简单地注释它:

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

并注入(inject)

@Inject A a;

如果您想要 A 的两个不同实例(具有不同的构造函数参数),您可以将它们子类化:

public AForLocalWarehouse extends A {
    public AForLocalWarehouse() {
        super(true);
    }
}

并注入(inject)它们

@Inject AForLocalWarehouse a;

或使用 producer methodqualifiers :

@Produces @LocalWarehouse
public A localWarehouse() { return new A(true); }

@Produces @RemoteWarehouse
public A remoteWarehouse() { return new A(false); }

并注入(inject)它们

@Inject @LocalWarehouse A a;
@Inject @RemoteWarehouse A a;

关于dependency-injection - 如何使用 CDI 注入(inject)带有参数化构造函数的类的实例(仅限 Java EE 6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835464/

相关文章:

c# - 在 C# 中使用 CaSTLe Windsor 自绑定(bind)

c# - 使用 ASP.NET Core 2.0 将 Simple Injector 组件注入(inject) IHostedService

primefaces、延迟加载数据表和 jsf @conversation 范围 bean

java - Spring-MVC - 创建名称为 'procesarController' : Injection of autowired dependencies failed 的 bean 时出错

dependency-injection - 将 Kotlin 与 Dagger 一起使用

java - 自定义领域问题

java - 通过扩展AppenderSkeleton来编写自己的appender?

java - 访问 actionPerformed 中的变量

java - JEE6 - CDI - 执行时的 DI

jakarta-ee - @RequestScoped CDI 注入(inject)到 @MessageDriven bean