Ответ
Жизненный цикл бина в Spring — это последовательность этапов, через которые проходит бин от момента его создания контейнером IoC до его уничтожения. Управление этим циклом позволяет внедрять логику инициализации и очистки ресурсов.
Основные этапы жизненного цикла:
- Создание экземпляра — контейнер создаёт объект через конструктор или фабричный метод.
- Внедрение зависимостей (Population of Properties) — Spring инжектирует все необходимые зависимости (через
@Autowired,@Resource, сеттеры или поля). - Инициализация (Initialization) — вызываются callback-методы:
- Методы, помеченные аннотацией
@PostConstruct. - Метод
afterPropertiesSet(), если бин реализует интерфейсInitializingBean. - Пользовательский метод init, указанный в конфигурации (например,
init-methodв XML или@Bean(initMethod = "...")).
- Методы, помеченные аннотацией
- Бин готов к использованию — бин находится в контексте в полностью сконфигурированном состоянии.
- Уничтожение (Destruction) — перед уничтожением контекста вызываются методы очистки:
- Методы с аннотацией
@PreDestroy. - Метод
destroy(), если бин реализуетDisposableBean. - Пользовательский метод destroy (аналогично init).
- Методы с аннотацией
Пример бина с аннотациями:
@Component
public class DatabaseService {
@PostConstruct
public void init() {
// Инициализация подключения к БД
System.out.println("Bean initialized. Connection pool ready.");
}
@PreDestroy
public void cleanup() {
// Закрытие ресурсов
System.out.println("Bean destroyed. Resources released.");
}
} Ответ 18+ 🔞
А, слушай, жизненный цикл бина в Spring! Ну это ж классика, блядь. Представь себе, как будто ты завёл себе питомца — ну, там, мартышку, или хомяка, или вот эту Муму, блядь. Сначала ты его рождаешь, потом кормишь, потом он живёт, а потом, сука, помирает. Вот и тут так же, только без слёз, внатуре.
Этапы, бля, жизненного цикла, как по нотам:
- Рождение, ёпта. Контейнер берёт и хуяк — создаёт объект. Как из ниоткуда, блядь. Через конструктор или какой-то там фабричный метод, ну, хуй с ним, главное — появился.
- Кормёжка, блядь (Population of Properties). А одного рождения мало, сука! Его же надо прокачать. Spring начинает ему впендюривать все зависимости:
@Autowired,@Resource, что там ещё есть... Всё засовывает, куда надо. Как будто мамка ребёнка кашей кормит — ложка за ложкой, пока не набьёт. - Инициация, бля, или "проснись и пой" (Initialization). Вот тут самое интересное начинается. Бин уже создан, накормлен, но ещё спит, сука. Надо его растолкать, сказать: "Э, сабака, сука, пора работать!". И для этого есть целых три пути, блядь, как в сказке:
- Самый модный — метод с
@PostConstruct. Аннотацию повесил и всё, пиздец, красота. - Если ты старовер, блядь, или любишь интерфейсы — можно реализовать
InitializingBeanи методafterPropertiesSet()написать. - А можно по-дедовски, в конфиге указать
init-method. Типа, "эй, Spring, вот этот метод вызови, когда всё заинжектишь, окей?".
- Самый модный — метод с
- Рабочая лошадка. Всё, блядь, бин готов, заряжен и стоит в контексте, как солдат. Можешь его вытаскивать и юзать на всю катушку. Золотое время, ебать!
- Закат, блядь, и разрушение (Destruction). Всё хорошее кончается. Контекст закрывается, приложение падает, сервер рестартуют — пиздец, короче. Но надо сделать всё красиво, не как Герасим с Муму, блядь. Надо ресурсы по-человечески закрыть. И тут опять три дорожки:
@PreDestroy— элегантно и современно.- Интерфейс
DisposableBeanс методомdestroy()— для ценителей классики. - И опять же, дедовский способ —
destroy-methodв конфигурации.
Вот, смотри, как это в коде выглядит, простой пример:
@Component
public class DatabaseService {
@PostConstruct
public void init() {
// Тут типа инициализируем подключение к БД
System.out.println("Бин проинициализирован. Пул соединений готов, блядь.");
}
@PreDestroy
public void cleanup() {
// А тут всё прибираем за собой, не свинячим
System.out.println("Бин уничтожен. Ресурсы отпущены нахуй.");
}
}
Вот и вся магия, блядь. Создали, настроили, поработали, прибрались. Главное — не забывать про этапы 3 и 5, а то будет как в той басне: завел соединение с базой, а закрыть забыл — и сидит оно, сиротой, память жрёт, овердохуища. А потом приходит OOM и говорит: "Здрасте, я ваша смерть".