java - 用枚举初始化 bean 的属性怎么样?

标签 java spring enums

我有一个枚举:

package com.stardust.emul;

public enum BonusTypes{
    BIRTHDAY,
    REGISTRATION,
    ACTIVE
}

和作为 spring 的 bean 的类(全部形成包 com.stardust.utils):

public interface BonusProcessor{

    public void processBonus();

}

public class BirthdayBonusProcessor implements BonusProcessor{

    //implementation

}

//and so forth

public class VisualService{
    Map<BonusTypes, BonusProcessor> processors;
    //Other staff
}

问题:如何在 Spring 配置文件中指定枚举类型的值?

在我的具体情况下,我想写这样的东西:

<bean id="birthdayProcessor class="com.stardust.utils.BirthdayBonusProcessor />

<bean id="visualService" class="com.stardust.utils.VisualService">
    <property name="processors">
        <map>
            <entry key ="__BonusTypes.BIRTHDAY__should_be_here" value-ref="birthdayProcessor"/>
        </map>
    </property>
</beans>

最佳答案

Spring 足够聪明,可以将 String 转换为 enum 类型(如果该值是 enum 常量的名称)。只需指定 map 的键类型即可。

<bean id="visualService" class="com.stardust.utils.VisualService">
    <property name="processors">
        <map key-type="com.fully.qualified.BonusTypes">
            <entry key="BIRTHDAY" value-ref="birthdayProcessor" />
        </map>
    </property>
</bean>

关于java - 用枚举初始化 bean 的属性怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29568927/

相关文章:

java - JComponent.setBounds 最后一个 JComponent 在错误的位置

java - 如何禁用 lambda 上缺少最终修饰符的 checkstyle 警告?

java - 如何在Java中将枚举转换为字节数组?

java - 使用 Java Config 的 Spring 集成和 JMS

java - 如何使用 Spring TaskExecutor 在应用程序的所有请求中使用单个任务池

typescript - TypeScript 字符串枚举中的反向映射

java - @RequestBody 对象不会自动反序列化

java - Lombok 不会在 hybris 自定义组件中生成 getter

swift - 为什么这个带有两个枚举的 Swift switch 语句不详尽?

typescript - 从 Typescript 中枚举的数值创建类型