Java CDI注入非零args构造函数

时间:2016-01-28 06:41:04

标签: java cdi

我正在玩java标准CDI,有一个概念让我无法理解。在下面的示例中,Application类“需要”不能注入的Person类,因为它具有非零args构造函数。我该如何使用CDI处理这种情况?

@Default
class Person {
 private String name;
 Person(String name) {
  this.name=name;
 }
 String getName() {
  return this.name;
 }
}


class Application {
  @Inject
  public Application(Instance<Person> p)
}

1 个答案:

答案 0 :(得分:2)

有三种方法可以在没有no-args构造函数的情况下注入对象。一种是使用生产者来创建对象。

@Produces 
private Person producePerson() {
    return new Person(name);
}

第二个是使用@Inject注释其中一个构造函数,并确保所有参数都是有效的注入目标。

class Person {
    private String name;

    @Inject
    Person(String name) {
        this.name=name;
    }

    String getName() {
        return this.name;
    }
}

以及其他地方:

@Produces 
private String producePersonName() {
    return name;
}

(设置多种这类注射可能需要创建一些限定符注释)

第三是使用自定义扩展来处理CDI容器初始化,但这对于这种相对简单的需求来说是过度的。