使用CDI-Weld注入继承的属性值

时间:2013-08-26 11:28:00

标签: java cdi weld

我正在开发一个基本的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已进入遗留项目并且我希望从中继承我的类并注入该属性,解决方案可以是什么?

1 个答案:

答案 0 :(得分:1)

CDI目前不支持本机XML配置。您必须使用Solder之类的库来实现此目的。但是,这是一种不好的做法,并强烈建议您在配置依赖关系管理(spring.xml)时设置bean属性,因为这不是类型和重构安全的。 另一种选择是使用生产者方法,您将在其中设置所需的值:

public SchoolBoy produceSchoolBoy {
   //construct new SchoolBoy() and set its name
}

您将拥有不同学生类型的制作人。不是很灵活,但会起作用。