Интервью не знает разницы между BeanFactory и ApplicationContext?

Spring

Интерфейсы BeanFactory и ApplicationContext используются для получения bean-компонентов Spring из контейнера, однако они очень разные.

Я видел много вопросов о разнице между BeanFactory и ApplicationContext, имея в виду, должен ли я использовать первое или второе для получения bean-компонентов из контейнера Spring? пожалуйста, посмотри вниз

directory-1161965_640.jpg

Что такое весенняя фасоль

Это очень простая и сложная проблема.Вообще говоря, 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 в работе.


a (1).png

Переведено с:Difference Between BeanFactory and ApplicationContext in Spring