Задать вопрос
@grv1

Как объявить скоп сервиса так, чтобы при вызове в RabbitListener сервис был заново инициализирован?

До внедрения очереди у сервиса стояла аннотация @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) и при каждом http запросе сервис имел новый скоп. Необходимо тоже самое, но для каждого сообщения в очереди.
  • Вопрос задан
  • 162 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Java-разработчик
    14 месяцев
    Далее
  • Хекслет
    Java-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Э-э-э... может сервис сделать stateless, а не statefull?!
Ответ написан
zolt85
@zolt85
Программист
Для того, чтоб спринговый бин инициализировался каждый раз, когда он будет запрошен, его нужно отметить аннотацией
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
Тут есть некоторые нюансы, а именно, если Вы будете инжектить такой бин в другой бин, который является синглтоном (по-умолчанию), то заинжектится такой бин только один раз, соответственно по-факту это будет синглтон.
А если Вы будете просить такой бин в коде у ApplicationContext, то да, всегда будете получать новый инстанс бина.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы