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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章