Что такое жизненный цикл бина в Spring?

Ответ

Жизненный цикл бина в Spring — это последовательность этапов, через которые проходит бин от момента его создания контейнером IoC до его уничтожения. Управление этим циклом позволяет внедрять логику инициализации и очистки ресурсов.

Основные этапы жизненного цикла:

  1. Создание экземпляра — контейнер создаёт объект через конструктор или фабричный метод.
  2. Внедрение зависимостей (Population of Properties) — Spring инжектирует все необходимые зависимости (через @Autowired, @Resource, сеттеры или поля).
  3. Инициализация (Initialization) — вызываются callback-методы:
    • Методы, помеченные аннотацией @PostConstruct.
    • Метод afterPropertiesSet(), если бин реализует интерфейс InitializingBean.
    • Пользовательский метод init, указанный в конфигурации (например, init-method в XML или @Bean(initMethod = "...")).
  4. Бин готов к использованию — бин находится в контексте в полностью сконфигурированном состоянии.
  5. Уничтожение (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! Ну это ж классика, блядь. Представь себе, как будто ты завёл себе питомца — ну, там, мартышку, или хомяка, или вот эту Муму, блядь. Сначала ты его рождаешь, потом кормишь, потом он живёт, а потом, сука, помирает. Вот и тут так же, только без слёз, внатуре.

Этапы, бля, жизненного цикла, как по нотам:

  1. Рождение, ёпта. Контейнер берёт и хуяк — создаёт объект. Как из ниоткуда, блядь. Через конструктор или какой-то там фабричный метод, ну, хуй с ним, главное — появился.
  2. Кормёжка, блядь (Population of Properties). А одного рождения мало, сука! Его же надо прокачать. Spring начинает ему впендюривать все зависимости: @Autowired, @Resource, что там ещё есть... Всё засовывает, куда надо. Как будто мамка ребёнка кашей кормит — ложка за ложкой, пока не набьёт.
  3. Инициация, бля, или "проснись и пой" (Initialization). Вот тут самое интересное начинается. Бин уже создан, накормлен, но ещё спит, сука. Надо его растолкать, сказать: "Э, сабака, сука, пора работать!". И для этого есть целых три пути, блядь, как в сказке:
    • Самый модный — метод с @PostConstruct. Аннотацию повесил и всё, пиздец, красота.
    • Если ты старовер, блядь, или любишь интерфейсы — можно реализовать InitializingBean и метод afterPropertiesSet() написать.
    • А можно по-дедовски, в конфиге указать init-method. Типа, "эй, Spring, вот этот метод вызови, когда всё заинжектишь, окей?".
  4. Рабочая лошадка. Всё, блядь, бин готов, заряжен и стоит в контексте, как солдат. Можешь его вытаскивать и юзать на всю катушку. Золотое время, ебать!
  5. Закат, блядь, и разрушение (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 и говорит: "Здрасте, я ваша смерть".