[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chto-takoe-spring-konteyner-v-chyom-raznitsa-mezhdu-beanfactory-i-applicationcontext":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},607,"chto-takoe-spring-konteyner-v-chyom-raznitsa-mezhdu-beanfactory-i-applicationcontext",14,"spring","Spring","🌱","Что такое Spring-контейнер? В чём разница между BeanFactory и ApplicationContext?","Spring-контейнер (IoC-контейнер) -- ядро Spring Framework, отвечающее за создание бинов, их конфигурирование и управление жизненным циклом. Контейнер читает метаданные конфигурации (аннотации, XML, Java-конфигурация) и на их основе создаёт и связывает объекты.\n\n| Аспект | BeanFactory | ApplicationContext |\n|--------|-------------|--------------------|\n| Инициализация | Ленивая (lazy) -- бины создаются при первом запросе | Жадная (eager) -- singleton-бины создаются при запуске |\n| Интернационализация | Нет | Да (MessageSource) |\n| Публикация событий | Нет | Да (ApplicationEventPublisher) |\n| Загрузка ресурсов | Нет | Да (ResourceLoader) |\n| Интеграция с AOP | Нет | Да |\n| Поддержка профилей | Нет | Да |\n\n```java\n\u002F\u002F BeanFactory -- базовый (редко используется напрямую)\nBeanFactory factory = new XmlBeanFactory(new ClassPathResource(\"beans.xml\"));\nMyBean bean = factory.getBean(MyBean.class);\n\n\u002F\u002F ApplicationContext -- стандартный выбор\nApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);\n\n\u002F\u002F Spring Boot создаёт ApplicationContext автоматически\nSpringApplication.run(MyApplication.class, args);\n```\n\n### Основные реализации ApplicationContext\n\n- `AnnotationConfigApplicationContext` -- для Java-конфигурации\n- `ClassPathXmlApplicationContext` -- для XML-конфигурации из classpath\n- `FileSystemXmlApplicationContext` -- для XML из файловой системы\n- `WebApplicationContext` -- для веб-приложений\n\n> **На собеседовании:** в современных приложениях всегда используется ApplicationContext. BeanFactory оправдан только в средах с крайне ограниченными ресурсами. Частая ошибка -- не знать, чем они отличаются, и сказать «это одно и то же».","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое IoC и DI? В чём разница между ними? — Gymterview","IoC (Inversion of Control) -- принцип проектирования, при котором управление созданием объектов и их жизненным циклом передаётся от самого приложения к фреймвор","IoC (Inversion of Control) -- принцип проектирования, при котором управление созданием объектов и их жизненным циклом пе",[7,13],"IoC (Inversion of Control) -- принцип проектирования, при котором управление созданием объектов и их жизненным циклом передаётся от самого приложения к фреймворку. DI (Dependency Injection) -- конкретный паттерн реализации IoC, при котором зависимости «внедряются» в объект контейнером извне.",true]