Какой паттерн проектирования используется для создания бинов в Spring?

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

Ответ

Основным паттерном для создания бинов в Spring является Factory Method. Контейнер Spring выступает в роли фабрики, которая инстанцирует и управляет объектами (бинами) на основе конфигурации.

Почему Factory Method? Контейнер не использует оператор new напрямую в клиентском коде. Вместо этого он вызывает фабричные методы (помеченные @Bean или определенные в XML), которые инкапсулируют логику создания объекта.

Пример:

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        // Spring вызовет этот фабричный метод
        return new MyServiceImpl(dependency());
    }

    @Bean
    public Repository repository() {
        return new JdbcRepository(dataSource());
    }
}

Другие задействованные паттерны:

  • Singleton — область видимости бина по умолчанию. Контейнер возвращает один и тот же экземпляр.
  • Prototype — при каждом запросе создается новый экземпляр (задается аннотацией @Scope("prototype")).
  • Dependency Injection — паттерн, используемый для внедрения зависимостей, созданных фабрикой, в другие бины.