← Назад к вопросам

В чем разница между BeanFactory и ApplicationContext в Spring?

1.8 Middle🔥 161 комментариев
#Spring Boot и Spring Data#Spring Framework

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

BeanFactory vs ApplicationContext

Оба интерфейса отвечают за управление жизненным циклом бинов в Spring, но ApplicationContext предоставляет более широкий функционал и рекомендуется в большинстве случаев.

BeanFactory

BeanFactory — это базовый интерфейс для работы с бинами. Это самый минимальный контейнер, который отвечает только за создание и управление объектами.

// Использование BeanFactory
XmlBeanFactory factory = new XmlBeanFactory(
    new ClassPathResource("beans.xml")
);

// Получение бина
MyService service = factory.getBean("myService", MyService.class);

Характеристики BeanFactory:

  • Ленивая инициализация (lazy initialization) — бины создаются только при запросе
  • Минимальный набор функций
  • Легкий вес — используется в embedded системах

ApplicationContext

ApplicationContext расширяет BeanFactory и добавляет много дополнительных возможностей для production-приложений.

// Использование ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

// Или с Java конфигурацией
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

// Получение бина
MyService service = context.getBean("myService", MyService.class);

Сравнительная таблица

ФункцияBeanFactoryApplicationContext
Создание биновДаДа
Lazy initializationДа (по умолчанию)Нет (eager)
Автоподключение (@Autowired)НетДа
Интернационализация (i18n)НетДа
Event publishingНетДа
Resource loadingНетДа
Поддержка аннотацийОграниченаПолная
AOPОграниченаДа
Инициализация конфигурацииРучнаяАвтоматическая

Практический пример

public class MyService {
    @Autowired
    private MyRepository repository;
}

@Configuration
public class AppConfig {
    @Bean
    public MyRepository myRepository() {
        return new MyRepository();
    }
    
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

public class Main {
    public static void main(String[] args) {
        // ApplicationContext автоматически инициализирует все бины при создании
        ApplicationContext context = 
            new AnnotationConfigApplicationContext(AppConfig.class);
        
        MyService service = context.getBean(MyService.class);
        // @Autowired уже инициализирован благодаря ApplicationContext
    }
}

Жизненный цикл бинов

BeanFactory:

// Бины создаются при первом запросе
MyService service = factory.getBean("myService"); // Создание происходит здесь

ApplicationContext:

ApplicationContext context = 
    new AnnotationConfigApplicationContext(AppConfig.class);
// Все бины уже созданы к этому моменту (eager initialization)
MyService service = context.getBean("myService"); // Просто берём готовый объект

Когда использовать каждый

BeanFactory: Только для очень простых приложений или embedded систем с ограниченными ресурсами

ApplicationContext: Практически всегда в production приложениях:

  • Spring Boot автоматически создаёт ApplicationContext
  • Поддержка всех Spring-фич (@Autowired, AOP, events и т.д.)
  • Проще для тестирования и конфигурации

Вывод: ApplicationContext — это modernized расширение BeanFactory с полным набором фич для построения enterprise приложений.