我正在开发一个基本的Swing应用程序,即使我总是倾向于使用Spring Ioc(带有xml配置)进行依赖项注入,我也想尝试一下CDI-Weld。在Spring中完成以下结构后,容器将创建一个SchoolBoyUniversityStudent,每个都有其名称。



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
}


您将拥有一个针对不同学生类型的制作人。不是很灵活,但是可以工作。

10-02 11:03
查看更多