在SpringBoot项目的RestController中使用静态变量

时间:2018-09-14 13:58:13

标签: java spring spring-mvc spring-boot

我有一个带有一些Rest Controller的SpringBoot 2.0.5.RELEASE项目。

在我的控制器中,我有以下方法:

GetMapping(path = "/menu", consumes = "application/json", produces = "application/json")
        public ResponseEntity<List<String>> menus() {

            List<String> result = Arrays.stream(MenuAlertEnum.values())
                      .map(MenuAlertEnum::getAlertName)
                      .collect(Collectors.toList());

            return ResponseEntity.ok(result);

        }

因为MenuAlertEnum是应用程序。常量,并且将始终具有相同的值,我希望将其作为静态变量放入控制器中以使其更快,但是默认情况下,我认为spring bean是单例,这不是一个好习惯吗?

2 个答案:

答案 0 :(得分:2)

您可以使用Java的静态块来初始化该值。它只运行一次。

static List<String> alertNames;

static {
  alertNames = Arrays.stream(MenuAlertEnum.values())
                      .map(MenuAlertEnum::getAlertName)
                      .collect(Collectors.toList());
}

然后直接在您的控制器中使用alertNames。

答案 1 :(得分:1)

创建Java Enum是为了避免使用public static final String CONSTATNT_VALUE = "FOO"。您可以从静态上下文中的任何位置调用枚举,因此无需创建任何静态块。

@GetMapping(path = "/menu", consumes = "application/json", produces = "application/json")
public List<MenuAlertEnum> menus() {
    return Arrays.asList(MenuAlertEnum.values());
}
  • 仅静态Arrays.asList()和静态MenuAlertEnum.values()-易于阅读,仅一行代码。希望你会发现它有用:)