我正在开发一个基本的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
进入遗留项目的极端情况,并且我想从中继承我的类并注入该属性,解决方案是什么? 最佳答案
CDI当前不本地支持XML配置。您必须使用Solder之类的库来实现此目的。但是,这是一种不好的做法,强烈建议不要在用于配置依赖项管理(spring.xml)的位置设置bean属性,因为这不是类型,而且重构也不安全。
另一种选择是使用生产者方法,在其中您将设置所需的值:
public SchoolBoy produceSchoolBoy {
//construct new SchoolBoy() and set its name
}
您将拥有一个针对不同学生类型的制作人。不是很灵活,但是可以工作。