1. 程式人生 > >一,Spring容器BeanFactory和ApplicationContext對比

一,Spring容器BeanFactory和ApplicationContext對比

BeanFactory和ApplicationContext對比

BeanFactory和ApplicationContext聯絡

BeanFactory和ApplicationContext是Spring的兩大核心介面,而其中ApplicationContext是BeanFactory的子介面。它們都可以當做Spring的容器,Spring容器是生成Bean例項的工廠,並管理容器中的Bean。在基於Spring的Java EE應用中,所有的元件都被當成Bean處理,包括資料來源,Hibernate的SessionFactory、事務管理器等。

Spring容器最基本的介面就是BeanFactory。BeanFactory負責配置、建立、管理Bean,它有一個子介面ApplicationContext,也被稱為Spring上下文,容器同時還管理著Bean和Bean之間的依賴關係。

BeanFactory和ApplicationContext區別

BeanFactory特點

BeanFactory常用的實現類是DefaultListableBeanFactory,呼叫者只需要使用getBean()方法就可以獲得指定的引用,無須關心Bean的例項化過程。建立Spring容器的例項時,必須提供Spring容器管理的Bean的詳細配置資訊。Spring的配置資訊通常採用XML配置檔案來設定,因此,建立BeanFactory例項時,應該提供XML配置檔案作為引數。XML配置檔案通常使用Resource物件傳入。

Resource isr = new ClassPathResource("beans.xml");
//Resource isr = new FileSystemResource("beans.xml");
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinition(isr);

ApplicationContext特點

ApplicationContext常用的實現類是FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotationConfigApplicationContext。如果在Web應用中使用Spring容器,則通常使用XmlWebApplicationContext、AnnotationConfigApplicationContext兩個實現類。如果需要使用多個XML配置檔案建立Spring容器,可以使用FileSystemXmlApplicationContext或者是ClassPathXmlApplicationContext。

除了提供BeanFactory所支援的所有功能外,ApplicationContext還有額外的功能

  • 預設初始化所有的Singleton,也可以通過配置取消預初始化。
  • 繼承MessageSource,因此支援國際化。
  • 資源訪問,比如訪問URL和檔案。
  • 事件機制。
  • 同時載入多個配置檔案。
  • 以宣告式方式啟動並建立Spring容器。

由於ApplicationContext會預先初始化所有的Singleton Bean,於是在系統建立前期會有較大的系統開銷,但一旦ApplicationContext初始化完成,程式後面獲取Singleton Bean例項時候將有較好的效能。也可以為bean設定lazy-init屬性為true,即Spring容器將不會預先初始化該bean。