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

Vol*_*lte 2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 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);
  }

}
Run Code Online (Sandbox Code Playgroud)

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

  • 可能你的意思是`@Configuration`或`@Component`,但除此之外,这是一个好主意! (2认同)