Как создать одноразовый bean-компонент на Springboot

По умолчанию в springboot, когда мы объявляем метод с @Bean, экземпляр объекта будет общим для всех объектов, которые запрашивают @Autowired этого класса...

Что, если я хочу, чтобы Spring доставлял разные экземпляры для каждого класса autowire, запрашивающего этот объект?

Я имею в виду, что вместо того, чтобы делиться одним экземпляром компонента, нужно иметь несколько «одноразовых» компонентов для каждой заявки на этот объект?

Почему я этого хочу?

причина довольно проста, RestTemplateBuilder — это обычный bean-компонент, используемый в большинстве приложений Spring, по своей природе этот строитель является STATEFUL, что означает, что любые изменения, внесенные в один класс в его структуру, вызовут побочные эффекты для всех других объектов, которые его используют.

Это не состояние, так как построитель для каждого вызова метода возвращает новый RestTemplateBuilder вместо изменения внутреннего состояния. Поэтому, если вам нужно несколько разных RestTemplate, вы можете настроить его по умолчанию и для каждого RestTemplate просто вызвать цепочку методов и создать ее.

M. Deinum 23.11.2022 08:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

@Bean
@Scope("prototype")
public Person personPrototype() {
    return new Person();
}

вы также можете использовать константу следующим образом:

@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)

Другие вопросы по теме