1

我正在开发一个基本的 Swing 应用程序,即使我总是倾向于使用 Spring Ioc(带有 xml 配置)进行依赖注入,我也想尝试 CDI-Weld。在 Spring 中完成以下结构后,容器创建 aSchoolBoy和 a 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我想从中继承我的类并注入该属性,解决方案可能是什么?

4

1 回答 1

1

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

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

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

于 2013-08-27T07:48:19.017 回答