Карта / Spring Core / @Configuration, @Bean

@Configuration, @Bean

@Bean — способ зарегистрировать объект в Spring-контейнере вручную, когда @Component не подходит (например, для классов из внешних библиотек, которые ты не можешь пометить аннотацией сам).

@Configuration                          // класс с конфигурацией бинов
class AppConfig {

    @Bean                                 // метод создаёт и регистрирует бин
    RestTemplate restTemplate() {
        return new RestTemplate();          // класс из библиотеки Spring, нет доступа к его исходникам
    }

    @Bean
    ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JavaTimeModule());   // ручная настройка перед регистрацией
        return mapper;
    }
}

Дальше этот бин можно внедрять как любой другой через @Autowired/конструктор.

Копнуть глубже

Когда выбирать @Bean, а когда @Component:

@Component@Bean
Где ставитсяна сам классна метод в @Configuration-классе
Когда использоватьсвой класс, есть доступ к кодукласс из внешней библиотеки, или нужна сложная настройка перед регистрацией
Гибкостьпросто помечаешь классможешь написать любую логику создания объекта внутри метода

@Bean-метод может зависеть от других бинов — просто принимает их как параметры метода:

@Bean
UserService userService(UserRepository repo, EmailValidator validator) {
    return new UserService(repo, validator);   // Spring сам подставит уже созданные бины
}

Это полезно, когда нужно настроить объект сложнее, чем просто @Component на класс позволяет.

🎤 Закрыл тему, если можешь объяснить:
• зачем нужен `@Bean`, если уже есть `@Component`;
• как `@Bean`-метод может зависеть от других бинов (если дошёл до 2-го слоя).