Что такое бин в Spring и какова его роль?

«Что такое бин в Spring и какова его роль?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Бин (Bean) в Spring — это объект, жизненным циклом которого управляет IoC-контейнер (ApplicationContext). Контейнер создаёт, конфигурирует и связывает бины на основе метаданных (аннотаций, XML или Java-конфигурации).

Ключевая роль бинов:

  • Основной строительный блок приложения. Все компоненты (сервисы, репозитории, контроллеры) объявляются как бины.
  • Реализация внедрения зависимостей (DI). Контейнер автоматически разрешает и внедряет зависимости между бинами.
  • Управление жизненным циклом. Spring контролирует создание, инициализацию (через @PostConstruct или InitializingBean) и уничтожение (через @PreDestroy или DisposableBean) бина.
  • Гибкость конфигурации через скоупы. Например:
    • @Singleton (по умолчанию) — один экземпляр на контейнер.
    • @Prototype — новый экземпляр при каждом запросе.
    • @Request, @Session, @Application (для веб-приложений).

Пример объявления и использования бина:

@Service // Объявление бина (стереотипная аннотация @Component)
public class UserService {
    private final UserRepository userRepository;

    // Внедрение зависимости через конструктор (рекомендуемый способ)
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User findUser(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

@Repository
public class JpaUserRepository implements UserRepository {
    // Реализация репозитория
}

Бины обеспечивают слабую связанность, тестируемость и централизованное управление объектами в приложении.