Ответ
В 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создает один экземпляр на весь контейнер.