【问题标题】:Inject inherited property values using CDI-Weld使用 CDI-Weld 注入继承的属性值
【发布时间】:2013-08-26 11:28:00
【问题描述】:

我正在开发一个基本的 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>

我已经看到在 CDI 中使用 @Inject @Config 注释可以做类似的事情。但是,每次我看到这个,它们都在属性本身之上,并且作为一个继承的属性,我不能在这里为我的类这样做。如何实现每个Student 子类以获取自己的name 值?

更新

在子类中注入这些值并不一定意味着在配置文件中硬编码它们。属性值本身可以从 .properties 文件中获取。然而,考虑到Student 是一个遗留项目的边缘情况,我想从它继承我的类并注入该属性,解决方案可能是什么?

【问题讨论】:

    标签: java cdi weld


    【解决方案1】:

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

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

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

    【讨论】:

    • 并不一定意味着我想直接包含该值。可能是对存储值的 .properties 文件的引用。但是,如果它是 Aprotected 字段并且当我想使用 BB 扩展 A 时如何指向它?
    • 不明白你的第二个问题。你能更深入地解释一下吗?
    • 创建生产者方法并设置属性
    • 好的,我去看看。如果您可以为我的示例提供代码,那绝对是正确的答案。
    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多