Как я могу создать переменные, которые доступны во всем приложении, но одновременно запрашивать спецификацию c? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть микросервис Springboot, для которого я хочу улучшить возможности регистрации. Каждый раз, когда я отправляю эту услугу HTTP-запросу, есть кусочки информации, которые я хотел бы получить доступ во всем моем приложении. Например, если бы я отправил имя в теле запроса, я мог бы захотеть зарегистрировать это имя в нескольких разных классах приложения. Как я могу сделать это, не распространяя эти данные в каждом методе или классе? Я хотел бы иметь какую-то глобально доступную переменную, но, поскольку у этой службы есть несколько потоков, я не хочу возможности доступа к информации запроса другого потока, которую я хранил.

Примером тела запроса может быть что-то как это:

{
  "name": "Silly Willy",
  "birthday": "2020-02-02"
}

В моем приложении я хочу создать переменную для хранения этого имени. Я хочу, чтобы он был ориентирован на многопотоковое исполнение, специфицировал запрос c, но был доступен во всем моем приложении на время запроса. Нечто похожее на переменную stati c:

//In the class
public class Object {
  private static final String name;

  public Object(String name) {
    Object.name = name;
  }

  public static String getName() {
    return name;
  }
}
//In controller
Object obj = new Object(request.getName());

Я знаю, что строка неизменна, а переменные stati c не являются поточно-ориентированными, но я не совсем уверен, что я ищу за. Кто-то предложил использовать bean-компоненты и установить область действия для запроса, но я не уверен, как это будет выглядеть, или если это возможно с помощью метода конструктора (при условии, что я собираюсь создать класс для хранения этих приложений доступными переменные в).

В идеале я хотел бы иметь возможность создать объект или создать экземпляр чего-либо в контроллере при поступлении запроса, чтобы я мог использовать этот объект для облегчения своей регистрации:

log.info("{}", obj.getName());

1 Ответ

1 голос
/ 18 марта 2020

Я предполагаю, что вы находитесь в приложении Spring Boot, так как вы пометили свой вопрос следующим образом.

Затем просто создайте bean-объект с областью запроса следующим образом:

@Bean
@RequestScope
public MyBean myBean () {
    return new MyBean();
}

Который вы можете добавить в любой другой компонент, который вы хотите, и будет привязан к каждому входящему запросу.

Ваш Бин может даже иметь текущий HttpServletRequest или Response, автоматически подключенный так:

public class MyBean {

  @Autowired
  private HttpServletRequest request;

// do something with the request and present it in a getter..

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