面試題|Spring中BeanFactory與ApplicationContext的本質區別和作用


  BeanFactory 是Bean工廠,是Spring 框架最核心的接口,它提供了高級IoC 的配置機制。如果說BeanFactory是Spring的心臟,那么應用上下文ApplicationContext就是完整的軀體了,ApplicationContext繼承了BeanFactory接口,擁有BeanFactory的全部功能,擴展了更多面向實際應用的、企業級的高級特性。

  它們都可以視作Spring的容器,Spring容器負責對象(Spring中我們都稱之為bean)整個生命周期的管理——實例化、裝配和銷毀 Bean。在基於Spring的Java EE應用中,所有的組件都被當成Bean處理,包括數據源,Hibernate的SessionFactory、事務管理器等。我們一般稱BeanFactory為IoC容器,而稱ApplicationContext為應用上下文。

本質區別:BeanFactory是懶加載,ApplicationContext則在初始化應用上下文時就實例化所有單實例的Bean,可以指定為延遲加載。

  BeanFactory在初始化容器時,並未實例化Bean,如果Bean的某一個屬性沒有注入,BeanFacotry加載后,直至首次調用getBean方法才會拋出異常;而ApplicationContext則在初始化應用上下文時初始化所有單實例的Bean,這樣有利於檢查所依賴屬性是否已經注入。綜上所述,通常情況下我們首選ApplicationContext。

  由於ApplicationContext會預先初始化所有的Singleton Bean,於是在系統創建前期會有較大的系統開銷,但一旦ApplicationContext初始化完成,程序后面獲取Singleton Bean實例時候將有較好的性能。

二者作用描述如下:

  1. BeanFactory負責讀取bean配置文檔,管理bean的加載,實例化,維護bean之間的依賴關系,負責bean的生命周期。
  2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,還提供了更完整的框架功能:
    a. 國際化支持
    b. 資源訪問:Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”
    c. 事件傳遞:通過實現ApplicationContextAware接口
  3. 常用的獲取ApplicationContext的方法:
    FileSystemXmlApplicationContext:從文件系統或者url指定的xml配置文件創建,參數為配置文件名或文件名數組
    ClassPathXmlApplicationContext:從classpath的xml配置文件創建,可以從jar包中讀取配置文件
    WebApplicationContextUtils:從web應用的根目錄讀取配置文件,需要先在web.xml中配置,可以配置監聽器或者servlet來實現
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

  這兩種方式都默認配置文件為web-inf/applicationContext.xml,也可使用context-param指定配置文件

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param>

Reference


免責聲明!

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



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