BeanFactory、ApplicationContext


BeanFactory負責讀取Bean定義檔,管理物件的載入、生成,物件之間的關係維護,負責Bean的生命週期,對於簡單的應用程式來說,使用 BeanFactory就已經足夠,但是若要利用到Spring在框架上的一些功能以及進階的容器功能,則可以使用 ApplicationContext,BeanFactory則通常用於一些資源有限的裝置,像是行動設備。

ApplicationContext的基本功能與BeanFactory很相似,它也負責讀取Bean定義檔,維護Bean之間的關係等,然而ApplicationContext提供的一個應用程式所需的更完整的框架功能:
  • ApplicationContext提供取得資源檔案更方便的方法。
  • ApplicationContext提供文字訊息解析的方法,並支援國際化(Internationalization, I18N)訊息。
  • ApplicationContext可以發佈事件,對事件感興趣的Bean可以接收到這些事件。

Rod Johnson建議使用ApplicationContext來取代BeanFactory,在許多實作ApplicationContext的類別中,最常使用的大概是以下三個:
  • FileSystemXmlApplicationContext
可指定XML定義檔的相對路徑或絕對路徑來讀取定義檔。
  • ClassPathXmlApplicationContext
從Classpath中來讀取XML定義檔。
  • XmlWebApplicationContext
在Web應用程式中的檔案架構中讀取定義檔。

舉個例子來說,可以將 第一個 Spring 程式 中的測試程式修改為以下的內容:
  • SpringDemo.java
package onlyfun.caterpillar; 

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringDemo {
public static void main(String[] args) {
ApplicationContext context =
new FileSystemXmlApplicationContext("beans-config.xml");

HelloBean hello =
(HelloBean) context.getBean("helloBean");
System.out.println(hello.getHelloWord());
}
}

為了能編譯與執行以上的程式,您必須將spring-context.jar加入至Classpath的設定中。

ApplicationContext繼承自多個介面:ApplicationEventPublisher、 HierarchicalBeanFactory、ListableBeanFactory、MessageSource、 ResourceLoader,相關的介面與使用說明,在往後的主題會一一介紹。
ApplicationContext