Что такое регистрация бина в Spring?

Ответ

Регистрация бина — это процесс объявления класса как управляемого компонента (бина) в контексте Spring IoC-контейнера. После регистрации Spring управляет его жизненным циклом: создаёт экземпляр, внедряет зависимости и уничтожает.

Основные способы регистрации:

  1. Через аннотации (чаще всего):
    @Component // Общая аннотация
    @Service   // Для бизнес-логики
    @Repository // Для доступа к данным
    @Controller // Для веб-слоя
    public class MyService {}
  2. Через Java-конфигурацию (@Bean в классе с @Configuration):
    @Configuration
    public class AppConfig {
        @Bean
        public DataSource dataSource() {
            return new HikariDataSource();
        }
    }
  3. Через XML-конфигурацию (устаревший способ).

Ключевые моменты:

  • Для сканирования аннотаций необходим @ComponentScan.
  • По умолчанию бин имеет scope «singleton».
  • Зарегистрированный бин можно инжектировать в другие компоненты с помощью @Autowired.

Ответ 18+ 🔞

Ну слушай, смотри, тут такая история с этими бинами в Спринге, блядь. Представь, что у тебя есть какой-нибудь сервис, обычный класс, который ты написал. Так вот, сам по себе он для Спринга — просто кусок кода, хуй с горы. Чтобы Спринг начал им управлять — создавать, кормить зависимостями, а потом и в утиль отправлять — его надо зарегистрировать. Вот это и есть «регистрация бина», ёпта.

Как это, сука, сделать? Есть три основных пути, но два из них — нормальные, а третий — для мазохистов из прошлого.

  1. Через аннотации (самый простой и частый). Ты просто пишешь над своим классом волшебное слово, и всё, ты в деле.

    @Service // Вот эта штука. Можно @Component, @Repository, @Controller — суть одна, просто названия разные для красоты.
    public class MyService {
        // Тут твоя бизнес-логика, которая всех заебёт
    }

    Главное, не забудь сказать Спрингу: «Слушай, дружище, посмотри вокруг, найди все классы с такими аннотациями». Для этого есть @ComponentScan. Без него Спринг будет слепой, как крот, и ничего не найдёт.

  2. Через Java-конфигурацию. Это когда ты в отдельном классе, как царь, руками создаёшь и настраиваеваешь свой бин. Удобно для всяких внешних библиотек, где ты не можешь просто так накатить аннотацию.

    @Configuration
    public class AppConfig {
        @Bean // Вот он, ручной режим!
        public DataSource dataSource() {
            // Создаёшь и настраиваешь соединение с базой, например
            return new HikariDataSource();
        }
    }

    Типа, «на, Спринг, держи биноман, я его сам собрал».

  3. Через XML. Да, блядь, такое ещё где-то есть. Это как пытаться объяснить что-то через факс в 2024 году. В рот меня чих-пых, лучше даже не смотри в эту сторону, если только тебя не приперло к легаси-проекту.

Что важно помнить, а?

  • Без @ComponentScan для аннотаций — нихуя не заработает. Спринг просто не будет искать твои @Service.
  • По умолчанию, если ты зарегистрировал бин, он будет синглтоном. То есть на всё приложение один экземпляр. Экономия, блядь, памяти.
  • Ну и главный прикол: после регистрации этот бин можно заинжектить куда угодно с помощью @Autowired. Просто говоришь: «Хочу вот этот сервис!», и Спринг тебе его подсовывает. Волшебство, ёперный театр!