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 подскажет развёрнутый ответ в реальном времени.