我有一个带有一些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是单例,这不是一个好习惯吗?
答案 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()
-易于阅读,仅一行代码。希望你会发现它有用:)