Вопрос проверяет понимание prototype-бинов в Spring Framework и их отличий от singleton-бинов, что важно для управления состоянием и жизненным циклом объектов в контейнере.
В Spring Framework scope (область видимости) бина определяет его жизненный цикл и то, как контейнер управляет его экземплярами. По умолчанию бин является singleton — создаётся один раз при инициализации контекста и переиспользуется. Prototype-бин, напротив, создаётся каждый раз, когда контейнеру требуется предоставить этот бин (например, при внедрении зависимости или вызове getBean()).
@PostConstruct), но не вызывает методы уничтожения (например, @PreDestroy). Очистка ресурсов — задача клиентского кода.ObjectFactory).Prototype-бин можно задать через аннотацию @Scope или XML-конфигурацию.
@Component
@Scope("prototype")
public class ShoppingCart {
private List<String> items = new ArrayList<>();
public void addItem(String item) {
items.add(item);
}
public List<String> getItems() {
return items;
}
}
@Service
public class OrderService {
// При каждом обращении будет новый ShoppingCart
@Autowired
private ObjectFactory<ShoppingCart> cartFactory;
public ShoppingCart createNewCart() {
return cartFactory.getObject();
}
}Prototype-бины полезны в сценариях, где объект должен быть неразделяемым и иметь короткое время жизни: пользовательские сессии, корзины покупок, DTO (Data Transfer Objects), объекты с временными данными (например, отчёты), или когда состояние объекта изменяется часто и не должно влиять на другие компоненты.
Вывод: Используйте prototype-бин, когда вам нужен новый экземпляр объекта при каждом запросе, и состояние объекта не должно быть общим. Это обеспечивает изоляцию данных, но требует внимания к управлению памятью, так как контейнер не очищает такие бины автоматически.