BeanFactory和ApplicationContext的異同


相同:

  • Spring提供了兩種不同的IOC 容器,一個是BeanFactory,另外一個是ApplicationContext,它們都是Java interface,ApplicationContext繼承於BeanFactory(ApplicationContext繼承ListableBeanFactory。
  • 它們都可以用來配置XML屬性,也支持屬性的自動注入。
  • 而ListableBeanFactory繼承BeanFactory),BeanFactory 和 ApplicationContext 都提供了一種方式,使用getBean("bean name")獲取bean。

BeanFactory 獲取bean注冊信息

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 獲取bean注冊信息

public class HelloWorldApp{ 
   public static void main(String[] args) { 
      ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); 
      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");    
      obj.getMessage();    
   }
}

但是他們在工作和特性上有一些不同:

  • 當你調用getBean()方法時,BeanFactory僅實例化bean,而ApplicationContext 在啟動容器的時候實例化單例bean,不會等待調用getBean()方法時再實例化。
  • BeanFactory不支持國際化,即i18n,但ApplicationContext提供了對它的支持。
  • BeanFactory與ApplicationContext之間的另一個區別是能夠將事件發布到注冊為監聽器的bean。
  • BeanFactory 的一個核心實現是XMLBeanFactory 而ApplicationContext 的一個核心實現是ClassPathXmlApplicationContext,Web容器的環境我們使用WebApplicationContext並且增加了getServletContext 方法。
  • 如果使用自動注入並使用BeanFactory,則需要使用API注冊AutoWiredBeanPostProcessor,如果使用ApplicationContext,則可以使用XML進行配置。
  • 簡而言之,BeanFactory提供基本的IOC和DI功能,而ApplicationContext提供高級功能,BeanFactory可用於測試和非生產使用,但ApplicationContext是功能更豐富的容器實現,應該優於BeanFactory


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM