如何在枚举中读取Spring Messagesource中的内容?

sim*_*mon 3 java enums spring properties autowired

我有一个包含三种不同状态类型的枚举.这些状态应显示在发送给用户的电子邮件中,包含要显示的状态的字符串存储在messages.properties中(使用Spring类org.springframework.context.MessageSource的实现读取).这在普通的Spring控制器中运行良好.但是,我更愿意在Enum中获得"显示状态"(在一个地方包含逻辑).

但是,将消息源自动连接到枚举,如下面的代码似乎不起作用,因为messageSource属性始终为空.


public enum InitechStatus{
        OPEN("open"), CLOSED("closed"), BROKEN("broken");

        public final String name;
        @Autowired
        private MessageSource messageSource;

        InitechStatus(String name) {
            this.name = name;
        }

        @Override
        public String toString() {

            String displayStatusString = messageSource.getMessage("page.systemadministration.broadcastmail.status."
                    + this.name, null, Locale.ENGLISH);
            return displayStatusString;
        }


    }
Run Code Online (Sandbox Code Playgroud)

如何在Enum中使用自动连线的消息源(或者是否有其他方法来实现我正在尝试的内容)?

sim*_*mon 6

我在SO上找到了这个答案的解决方案:使用Spring IoC来设置枚举值

这给了我使用java.util.ResourceBundle读取消息的指针,如下所示:


public enum InitechStatus{
        OPEN("open"), CLOSED("closed"), BROKEN("broken");

        private static ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",
                Locale.ENGLISH);

        public final String name;
        @Autowired
        private MessageSource messageSource;

        InitechStatus(String name) {
            this.name = name;
        }

        @Override
        public String toString() {

            String displayStatusString = resourceBundle.getString("page.systemadministration.broadcastmail.status."
                    + this.name);
            return displayStatusString;
        }


    }

Run Code Online (Sandbox Code Playgroud)