如何使用java spring bean动态分配枚举值

时间:2013-07-25 17:45:05

标签: java spring javabeans

我有以下代码:

package vb4.email;

import org.springframework.beans.factory.annotation.Value;

public enum ValidAddresses {

    // TODO: Is there a cleaner way to switch debugs?
    // How do we make this bean-able?

    @Value("${email.addresses.defaults.support}")
    DEFAULT_SUPPORT_ADDRESS("support@example.com"),
    @Value("${email.addresses.defaults.performance}")
    DEFAULT_PERFORMANCE_SUPPORT_ADDRESS("speed@example.com");

    private final String email;

    private ValidAddresses(final String email){
        this.email = email;
    }

    @Override
    public String toString()
    {
        return this.email;
    }
}

从我的@Value注释中可以看出,我正在寻找“bean化”这个过程。我希望枚举的好处作为构造,但我想在我们的.properties文件中进行配置。请记住,具有所有key = value对的.properties文件在整个站点中被广泛使用。

请保留你的答案;我不打算辩论已经存在的有效性。 (相信我,我理解你的沮丧)。

1 个答案:

答案 0 :(得分:6)

您可以为ValidAddresses枚举提供setter,然后使用初始化程序,例如

@Configurable
public class EnumValueInitializer {

  @Value("${email.addresses.defaults.support}")
  private String support;

  @PostConstruct
  public void postConstruct() {
    initializeAddressesEnum();
  }

  private void initializeAddressesEnum() {
    ValidAddresses.DEFAULT_SUPPORT_ADDRESS.setEmail(support);
  }

}

我希望它会有所帮助。祝你好运。