我正在玩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)
}
答案 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容器初始化,但这对于这种相对简单的需求来说是过度的。