Использование поля для такой функции на первый взгляд может вызвать проблемы во время интеграционного тестирования.
В идеале, просто следуйте принципу SRP и включите логику генерации в выделенный класс, который вы можете сделать инъекционным @Component
.. MyIdGenerator
и т. Д.
Там вы можете использовать синхронизированный метод generateId()
.
Теперь вы можете использовать его в любом контроллере, в котором он необходим, а также вы можете легче настроить интеграционный тест и лучше контролировать его.
Обновление:
Вы также можете воспользоваться HandleInterceptorAdapter
, если это будет глобальная стратегия:
@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
/* generate unique id here and log what is needed */
}
Вы можете инкапсулировать генерацию и запись идентификатора внутри этого класса.