我正在开发一个基本的Swing应用程序,即使我总是倾向于使用Spring Ioc(使用xml配置)进行依赖注入,我想尝试一下CDI-Weld。在Spring中完成以下结构后,容器会创建一个SchoolBoy
和一个UniversityStudent
,每个都有一个名称。
public class Student{
protected String name;
public void setName(String name){
this.name = name;
}
}
public class SchoolBoy extends Student{
}
public class UniversityStudent extends Student{
}
<bean class="SchoolBoy">
<property name="name" value="Daniel" />
</bean>
<bean class="UniversityStudent">
<property name="name" value="Rose" />
</bean>
我已经看到可以使用@Inject @Config
注释在CDI中执行类似的操作。但是,每次我看到它,它们都在属性本身之上,并且作为一个继承属性,我不能在这里为我的课程做到这一点。如何实现每个Student
子类以获得自己的name
值?
更新
在子类中注入该值并不一定意味着在配置文件中对它们进行硬编码。可以从 .properties 文件中获取属性值本身。然而,鉴于边缘情况Student
已进入遗留项目并且我希望从中继承我的类并注入该属性,解决方案可以是什么?
答案 0 :(得分:1)
CDI目前不支持本机XML配置。您必须使用Solder之类的库来实现此目的。但是,这是一种不好的做法,并强烈建议您在配置依赖关系管理(spring.xml)时设置bean属性,因为这不是类型和重构安全的。 另一种选择是使用生产者方法,您将在其中设置所需的值:
public SchoolBoy produceSchoolBoy {
//construct new SchoolBoy() and set its name
}
您将拥有不同学生类型的制作人。不是很灵活,但会起作用。