Что такое Spring Bean?
- Какой жизненный цикл у бина?
Бин — объект, которым управляет контейнер Spring: создаёт, внедряет зависимости, инициализирует, оборачивает прокси и уничтожает при закрытии контекста.
- Объявляется @Component и производными или методом @Bean
- Цикл: создание → внедрение → Aware-колбэки → BeanPostProcessor → @PostConstruct → готов → @PreDestroy
- По умолчанию singleton — один на контейнер
А ещё Объект, созданный через new, — не бин: на него не действуют @Transactional и внедрение
Подробно
Как появляется бин: сканирование классов с @Component, @Service, @Repository, @Controller; методы @Bean в @Configuration-классах; автоконфигурация Spring Boot.
Жизненный цикл (упрощённо):
- контейнер создаёт экземпляр (конструктор);
- внедряет зависимости (поля, сеттеры);
- вызывает Aware-интерфейсы (BeanNameAware, ApplicationContextAware);
BeanPostProcessor.postProcessBeforeInitialization;- инициализация:
@PostConstruct,InitializingBean.afterPropertiesSet,initMethod; postProcessAfterInitialization— здесь создаются прокси (@Transactional, @Async, AOP);- бин используется;
- при закрытии контекста —
@PreDestroy,DisposableBean.destroy(для singleton).
Важно: в контейнере лежит часто не ваш объект, а прокси вокруг него — поэтому self-invocation не проходит через @Transactional. Объект, созданный вручную через new, контейнер не знает: ни внедрения, ни аспектов.
Что хотят услышать
- Определение бина.
- Способы объявления.
- Этапы жизненного цикла.
- Прокси и объекты через new — плюс.
Частые ошибки
- Создавать сервисы через new и ждать работы @Transactional.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Объект, который создаёт и связывает зависимостями контейнер Spring
- ✗Любой Java-объект приложения, даже созданный вручную через оператор new
- ✗Только класс с аннотацией @Entity, который хранится в базе
- ✗Поток выполнения, который Spring выделяет под каждый запрос
Что спросят дальше
- Чем @PostConstruct отличается от InitializingBean?
- Что такое BeanPostProcessor?
Разбор темы
- Бины: жизненный цикл и scopes
Бин и BeanDefinition, полный жизненный цикл, роль BeanPostProcessor, области видимости и их ловушки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.