Используйте статические переменные в RestController в проекте SpringBoot - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть проект 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 - приложение. константы и всегда будут иметь те же значения, которые я хочу поместить в качестве статической переменной в контроллере, чтобы ускорить его, но по умолчанию пружинный бин является синглтоном, я думаю, что это не очень хорошая практика?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Не должно быть проблем с доступом к статическим данным из одноэлементного компонента, помимо проблем обычного параллелизма.

Если вы предпочитаете не использовать статические переменные, вы можете использовать @PostConstruct в вашем контроллере для инициализации локального объекта.вместо переменной:

private List<String> alerts;
....
@PostConstruct
public void setup() {
    alerts = Arrays.stream(MenuAlertEnum.values())
                  .map(MenuAlertEnum::getAlertName)
                  .collect(Collectors.toList());
}
0 голосов
/ 14 сентября 2018

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() - легко читается и содержит только одну строку кода. Надеюсь, вы найдете это полезным:)
0 голосов
/ 14 сентября 2018

Вы можете использовать статический блок Java для инициализации значения. Это просто запустить один раз.

static List<String> alertNames;

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

А затем напрямую используйте alertNames в вашем контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...