Ответ
Регистрация бина — это процесс объявления класса как управляемого компонента (бина) в контексте Spring IoC-контейнера. После регистрации Spring управляет его жизненным циклом: создаёт экземпляр, внедряет зависимости и уничтожает.
Основные способы регистрации:
- Через аннотации (чаще всего):
@Component // Общая аннотация @Service // Для бизнес-логики @Repository // Для доступа к данным @Controller // Для веб-слоя public class MyService {} - Через Java-конфигурацию (
@Beanв классе с@Configuration):@Configuration public class AppConfig { @Bean public DataSource dataSource() { return new HikariDataSource(); } } - Через XML-конфигурацию (устаревший способ).
Ключевые моменты:
- Для сканирования аннотаций необходим
@ComponentScan. - По умолчанию бин имеет scope «singleton».
- Зарегистрированный бин можно инжектировать в другие компоненты с помощью
@Autowired.
Ответ 18+ 🔞
Ну слушай, смотри, тут такая история с этими бинами в Спринге, блядь. Представь, что у тебя есть какой-нибудь сервис, обычный класс, который ты написал. Так вот, сам по себе он для Спринга — просто кусок кода, хуй с горы. Чтобы Спринг начал им управлять — создавать, кормить зависимостями, а потом и в утиль отправлять — его надо зарегистрировать. Вот это и есть «регистрация бина», ёпта.
Как это, сука, сделать? Есть три основных пути, но два из них — нормальные, а третий — для мазохистов из прошлого.
-
Через аннотации (самый простой и частый). Ты просто пишешь над своим классом волшебное слово, и всё, ты в деле.
@Service // Вот эта штука. Можно @Component, @Repository, @Controller — суть одна, просто названия разные для красоты. public class MyService { // Тут твоя бизнес-логика, которая всех заебёт }Главное, не забудь сказать Спрингу: «Слушай, дружище, посмотри вокруг, найди все классы с такими аннотациями». Для этого есть
@ComponentScan. Без него Спринг будет слепой, как крот, и ничего не найдёт. -
Через Java-конфигурацию. Это когда ты в отдельном классе, как царь, руками создаёшь и настраиваеваешь свой бин. Удобно для всяких внешних библиотек, где ты не можешь просто так накатить аннотацию.
@Configuration public class AppConfig { @Bean // Вот он, ручной режим! public DataSource dataSource() { // Создаёшь и настраиваешь соединение с базой, например return new HikariDataSource(); } }Типа, «на, Спринг, держи биноман, я его сам собрал».
-
Через XML. Да, блядь, такое ещё где-то есть. Это как пытаться объяснить что-то через факс в 2024 году. В рот меня чих-пых, лучше даже не смотри в эту сторону, если только тебя не приперло к легаси-проекту.
Что важно помнить, а?
- Без
@ComponentScanдля аннотаций — нихуя не заработает. Спринг просто не будет искать твои@Service. - По умолчанию, если ты зарегистрировал бин, он будет синглтоном. То есть на всё приложение один экземпляр. Экономия, блядь, памяти.
- Ну и главный прикол: после регистрации этот бин можно заинжектить куда угодно с помощью
@Autowired. Просто говоришь: «Хочу вот этот сервис!», и Спринг тебе его подсовывает. Волшебство, ёперный театр!