Короткий ответ
Spring Bean — это обычный Java-объект (POJO), который создаётся, настраивается и управляется IoC-контейнером Spring. В отличие от объекта, созданного через new, бин получает автоматически внедрённые зависимости, а его жизненным циклом от создания до уничтожения управляет контейнер.
Как это работает подробнее
Бины регистрируются в контексте приложения через стереотипные аннотации — @Component, @Service, @Repository, @Controller — либо декларацией @Bean внутри @Configuration-класса. Далее контейнер использует их для автоматического внедрения в другие компоненты.
- Этапы цикла: запуск контейнера и загрузка конфигурации, создание экземпляра бина, внедрение зависимостей, инициализация бина (например,
@PostConstructилиinit-method), выполнение бизнес-методов, затем вызов метода уничтожения (@PreDestroyилиdestroy-method) при остановке контейнера. - Зачем это нужно: централизованное управление объектами и зависимостями упрощает сопровождение и тестирование, а ресурсы — соединения с БД, сокеты, файлы — гарантированно освобождаются при завершении работы приложения.
Пример кода
MyBean.java
@Component
public class MyBean {
@PostConstruct
public void init() {
// открываем соединение с БД
}
@PreDestroy
public void destroy() {
// закрываем соединение с БД
}
}Что использовать на практике
- Для слоёв приложения используйте стереотипы
@Controller,@Service,@Repository, а инфраструктурные объекты объявляйте через@Beanв конфигурации. - Подготовку и освобождение ресурсов выносите в
@PostConstructи@PreDestroyлибо в методы init и destroy конфигурации@Bean.