Интерфейсы BeanFactory и ApplicationContext используются для получения bean-компонентов Spring из контейнера, однако они очень разные.
Я видел много вопросов о разнице между BeanFactory и ApplicationContext, имея в виду, должен ли я использовать первое или второе для получения bean-компонентов из контейнера Spring? пожалуйста, посмотри вниз
Что такое весенняя фасоль
Это очень простая и сложная проблема.Вообще говоря, Spring bean-компоненты - это объекты Java, управляемые контейнером Spring.Давайте рассмотрим простой пример.
package com.zoltanraffai;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("My Message : " + message);
}
}
В конфигурации на основе XML файл beans.xml предоставляет метаданные для компонентов Spring, управляемых контейнером.
Что такое контейнер Spring
Контейнер Spring отвечает за создание экземпляров, настройку и сборку компонентов Spring, давайте посмотрим, как настроить наш HelloWorld POJO для контейнера IoC.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.zoltanraffai.HelloWorld">
<property name = "message" value = "Hello World!"/>
</bean>
</beans>
Теперь, когда им управляет контейнер Spring, возникает следующий вопрос: как его получить?
Различия между BeanFactory и ApplicationContext
Интерфейс BeanFactory
Это корневой интерфейс, используемый для доступа к контейнеру Spring.Для доступа к контейнеру Spring мы будем использовать функцию внедрения зависимостей Spring, используя интерфейс BeanFactory и его подинтерфейсы.характеристика:
- Создание/конкатенация бина Как правило, реализации BeanFactory загружаются лениво, что означает, что экземпляры bean-компонентов создаются только тогда, когда мы вызываем их напрямую с помощью метода getBean(). Наиболее распространенным API для реализации BeanFactory является XMLBeanFactory. Вот пример того, как получить bean-компонент через BeanFactory:
package com.zoltanraffai;
import org.springframework.core.io.ClassPathResource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
public class HelloWorldApp{
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("beans.xml"));
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
obj.getMessage();
}
}
Интерфейс ApplicationContext
ApplicationContext — это центральный интерфейс в приложениях Spring для предоставления приложению информации о конфигурации. Он наследует интерфейс BeanFactory, поэтому ApplicationContext содержит все функциональные возможности BeanFactory и многое другое! Его основная функция заключается в поддержке создания крупномасштабных бизнес-приложений.характеристика:
- Bean instantiation/wiring
- Создание/конкатенация бина
- Автоматическая регистрация BeanPostProcessor
- Автоматическая регистрация BeanFactoryPostProcessor
- Удобный доступ к MessageSource (i18n)
- Публикация ApplicationEvent В отличие от ленивой загрузки BeanFactory, он предварительно загружен, поэтому каждый компонент создается после запуска ApplicationContext. Вот пример использования ApplicationContext:
package com.zoltanraffai;
import org.springframework.core.io.ClassPathResource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
public class HelloWorldApp{
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
}
}
Суммировать
ApplicationContext содержит все функции BeanFactory, обычно рекомендуется первый. Но есть некоторые ограничивающие случаи, такие как потребление памяти мобильным приложением более серьезное, в этих случаях более разумно использовать более легкий BeanFactory. Однако в большинстве корпоративных приложений ApplicationContext — ваш первый выбор.
вопрос души
- Как использовать BeanPostProcessor и BeanFactoryPostProcessor?
- Вы понимаете жизненный цикл Spring Bean? Знание этого будет очень полезно для использования бобов.
Добро пожаловать, чтобы продолжать обращать внимание, и в будущем будет опубликован ряд статей, чтобы объяснить и соединить точки знаний Spring, легко справиться с интервью и в полной мере использовать возможности Spring в работе.
Переведено с:Difference Between BeanFactory and ApplicationContext in Spring