當前位置:才華齋>IT認證>JAVA認證>

Spring建立Bean過程的方法

JAVA認證 閱讀(2.58W)

1. beans包提供了以程式設計方式管理和操作bean的基本功能,而context包增加了ApplicationContext,它以一種更加面向框架的方式增強了BeanFactory的功能。

Spring建立Bean過程的方法

2. context包的基礎是位於ext包中的ApplicationContext介面。它是由 BeanFactory介面派生而來的,提供了BeanFactory的所有功能。為了以一種更面向框架的方式工作,使用分層和繼承關係的上下文,context包還提供了一下的功能。

a. MessageSource,對I18N訊息的訪問。

b. 資源訪問,例如URL和檔案

c. 事件傳遞給是吸納了ApplicationListener介面的bean

d. 載入多個(有繼承關係)上下文,使得每一個上下文都專注於一個特定的層是,比如應用的web層。

  國際化支援

1. ApplicationContext擴充套件了MessageSource介面,因而提供了messaging的功能(I18N或者國際化)。同 NestingMessageSource一起使用,還能處理分級的資訊,這些是spring提供的處理資訊的基本介面。

2. 當一個ApplicationContext被載入時,它會自動查詢在context中定義的MessageSource bean.這個bean必須交做messageSource.如果找了這樣一個bean,所有對上述方法的呼叫將被委託給找到的 messageSource.如果沒有找到messageSource,ApplicationContext將會嘗試查詢他的父親是否包含有同名的 bean.如果有,它將把找到的bean作為MessageSource.如果他沒有找到任何的資訊處理源,他會建立一個 StaticMessageSource.

3. Spring目前提供了兩個MessageSource的實現,他們是

ResourceBundleMessageSource和StaticMessageSource.兩者都實現了 NestingMessageSource一邊能夠處理巢狀的資訊。StaticMessageSource很少被使用,但是他提供了程式設計的方式向 source增加資訊,我們經常使用的是ResourceBundleMessageSource.

  在Spring中使用資源

1. ApplicationContext繼承了ResourceLoader介面,在這個介面中,定義了getResource()方法,如下:

Resource getResource(String location)

該方法返回一個資源控制代碼。這個控制代碼應該總是一個可重複使用的資源描述符,允許多次呼叫getInputStream();

2. getResource()方法的`引數是一個資源訪問地址,例如:

file:c:/

classpath:(從classpath路徑中查詢檔案並返回他的資源控制代碼)

WEB-INF/

注意:getResource()方法返回的Resource控制代碼並不意味著資源實際存在,你需要呼叫Resource介面的exists()方法判斷資源是否存在。

Resource提供了與協議無關的特性。

  事件傳遞

1. ApplicationContext中的時間處理是通過AppcationEvent類和ApplicationListener介面來提供的。如果上下文中部署了一個實現了ApplicationListener介面的bean,每次一個ApplicationEvent釋出到 ApplicationContext時,那個bean就會被通知。實質撒謊功能,這是標準的Observer設計模式。

2. Spring提供的三個標準事件

a. ContextRefreshedEvent

當ApplicationContext已經初始化或重新整理後傳送的事件。這裡初始化意味著:所有的bean被裝載,singleton被預例項化,以及ApplicationContext已經準備好。

b. ContextClosedEvent

當使用ApplicationContext的close()方法結束上下文的時候傳送的事件。這裡意味著:singleton被銷燬。

c. RequestHandledEvent

一個與web相關的事件,告訴所有的bean一個HTTP請求已經被響應了(這個時間將會在一個請求結束後被髮送—)。注意,這個時間只能應用於使用了Spring的DispatcherServlet的web應用。