Mediumspring

Чем @Component отличается от @Bean?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

@Component (и стереотипы @Service, @Repository, @Controller) — помечает класс для component scanning: Spring находит класс через @ComponentScan и создаёт bean. @Beanметод в @Configuration, возвращаемый объект — bean (программный подход).

// @Component — для своих классов
@Service
public class UserService { /* ... */ }

// @Bean — для сторонних библиотек и conditional logic
@Configuration
public class AppConfig {
    @Bean
    public RestClient restClient(Props p) {
        return RestClient.builder().baseUrl(p.getUrl()).build();
    }
}
  • @Bean применяется: интеграция сторонних библиотек (нет исходников), conditional logic, несколько bean'ов одного типа;
  • @Component — convention over configuration, меньше boilerplate;
  • Жизненный цикл одинаков: scope, lifecycle callbacks, post-processors.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.