Что такое область видимости Prototype в Spring?

«Что такое область видимости Prototype в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Spring контексте область видимости (scope) prototype означает, что контейнер создает новый экземпляр бина при каждом запросе (через getBean() или инъекцию зависимости).

Пример объявления:

@Component
@Scope("prototype")
public class PrototypeService {
    private String id = UUID.randomUUID().toString();
    public String getId() { return id; }
}

Пример использования:

@Autowired
private ApplicationContext context;

public void demo() {
    PrototypeService bean1 = context.getBean(PrototypeService.class);
    PrototypeService bean2 = context.getBean(PrototypeService.class);
    System.out.println(bean1.getId()); // e.g., "c1b3f7a2..."
    System.out.println(bean2.getId()); // ДРУГОЙ ID, e.g., "f8a92e1d..."
    System.out.println(bean1 == bean2); // false
}

Ключевые моменты:

  • Управление жизненным циклом: Spring создает бин, но не управляет его полным жизненным циклом после передачи клиенту. Уничтожение — ответственность клиента.
  • Использование: Подходит для состояния, специфичного для каждого запроса (например, объект корзины покупок в веб-приложении).
  • Отличие от singleton: Область по умолчанию singleton создает один экземпляр на весь контейнер.