Ответ
В Spring, prototype bean — это бин, который создаётся каждый раз заново при запросе из контекста. В отличие от singleton (по умолчанию), где один экземпляр на весь контекст.
Пример:
@Configuration
public class AppConfig {
@Bean
@Scope("prototype")
public MyPrototypeBean myPrototypeBean() {
return new MyPrototypeBean();
}
}
Особенности:
- Каждый
getBean()или инжект создаёт новый экземпляр - Подходит для stateful компонентов
- Spring не управляет полным lifecycle (не вызывает destroy-методы)
- Может привести к утечкам памяти, если не контролировать создание
Используется, когда нужно независимое состояние для каждого использования.
Ответ 18+ 🔞
А, слушай, смотри, вот эта вся хуйня с бинами в Spring... Ну, в общем, есть у них там такая штука — prototype bean. Это не тот синглтон, который один на всю хату, как таракан на кухне, и все его используют. Нет, блядь! Это как раз наоборот — каждый раз, когда ты его просишь, тебе выдают свеженький, только что с завода, епта!
Вот смотри, как это выглядит в коде, тут всё просто:
@Configuration
public class AppConfig {
@Bean
@Scope("prototype")
public MyPrototypeBean myPrototypeBean() {
return new MyPrototypeBean();
}
}
Видишь? Аннотацию @Scope("prototype") прилепил — и всё, понеслась. Каждый раз, когда вызываешь getBean() или просто инжектишь эту хрень, Spring, сука, как заводская конвейерная лента, выдаёт тебе новый экземпляр. Не тот же самый, засаленный, что все уже по десять раз использовали, а новый, пахнущий свежей краской!
И вот зачем это, спрашивается, нужно? Ну, например, когда у твоего компонента должно быть своё собственное, независимое состояние. Как будто ты каждому гостю на вечеринке даёшь не одну общую бутылку пива на всех, а каждому по новой, личной, чтобы никто не слюнявил горлышко. Stateful компоненты, блядь, называются.
Но есть и подводные, сука, камни! Spring за полным жизненным циклом этого prototype-бина не следит. То есть, метод destroy он тебе сам не вызовет, даже не надейся. Сам разруливай, где создал, там и прибивай. А если забудешь — welcome to memory leak, дружок! Может накопиться овердохуища ненужных объектов, и приложение твоё накроется медным тазом.
Короче, юзай эту фичу с умом. Когда нужно каждому по своей, отдельной, независимой штуке — вот тогда оно самое то. А так — синглтона чаще хватает, честно говоря.