Вопрос проверяет знание базовых механизмов конфигурации Spring и понимание, как контейнер получает и управляет бинами.
Бины в Spring можно создавать через аннотации, Java-конфигурацию и XML. Самый распространённый способ — аннотации @Component и её специализации. Также бины можно объявлять с помощью метода с @Bean в @Configuration-классе. XML используется реже, в основном в легаси-проектах. Все способы в итоге приводят к регистрации бина в контексте.
Spring предоставляет несколько способов создания бинов, чтобы подходить под разные стили конфигурации и этапы развития проекта.
Бин Spring — это объект, созданный и управляемый контейнером Spring.
Перед перечислением важно отметить, что все способы эквивалентны с точки зрения контейнера, различается только способ объявления.
Самый популярный и современный способ.
@Component
@Service
@Repository
@Controller
Пример:
@Component
class UserService {
}
Особенности:
Требует component scanning
Минимум конфигурации
Хорошо подходит для бизнес-логики
@BeanИспользуется, когда нужен полный контроль над созданием объекта.
Пример:
@Configuration
class AppConfig {
@Bean
UserService userService() {
return new UserService();
}
}
Подходит для:
сторонних библиотек
сложной инициализации
настройки через параметры
Используется в старых проектах.
Особенности:
Вся конфигурация вне кода
Много шаблонного XML
Практически не используется в новых проектах
Используется редко, но возможна.
BeanDefinitionRegistry
ApplicationContextInitializer
Подходит для:
фреймворков
динамической регистрации бинов
На практике чаще всего используются аннотации и @Bean. Остальные способы применяются в специфических или легаси-сценариях.