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

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

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

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

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

0
Rafael Lima 22 Ноя 2022 в 21:50

1 ответ

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

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

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

@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
1
Yonatan Karp-Rudin 22 Ноя 2022 в 21:52