ApplicationContext學(xué)習(xí)
相對(duì)BeanFactory而言,ApplicationContext提供了以下擴(kuò)展功能:
1.國(guó)際化支持
我們可以在Beans.xml文件中,對(duì)程序中的語(yǔ)言信息(如提示信息)進(jìn)行定義,將程序中的提示
信息抽取到配置文件中加以定義,為我們進(jìn)行應(yīng)用的各語(yǔ)言版本轉(zhuǎn)換提供了極大的靈活性。
2.資源訪問(wèn)
支持對(duì)文件和URL的訪問(wèn)。
3.事件傳播
事件傳播特性為系統(tǒng)中狀態(tài)改變時(shí)的檢測(cè)提供了良好支持。
4.多實(shí)例加載
可以在同一個(gè)應(yīng)用中加載多個(gè)Context實(shí)例。
下面我們就這些特性逐一進(jìn)行介紹。
1) 國(guó)際化支持
配置文件
<beans>
<description>Spring Quick Start</description>
<bean id="messageSource" <!—注意,這里名字必須為messageSource -->
class="org.springframework.context.support.ResourceB
undleMessageSource">
<property name="basenames">
<list>
<value>messages</value>
</list>
</property>
</bean>
</beans>
在配置節(jié)點(diǎn)中,我們指定了一個(gè)配置名“messages”。Spring會(huì)自動(dòng)在CLASSPATH根路徑中按照如下順序搜尋配置文件并進(jìn)行加載(以Locale為zh_CN為例):
messages_zh_CN.properties
messages_zh.properties
messages.properties
messages_zh_CN.class
messages_zh.class
messages.class
再加入二個(gè)properties文件
示例中包含了兩個(gè)配置文件,內(nèi)容如下:
messages_zh_CN.properties:
userinfo=當(dāng)前登錄用戶: [{0}] 登錄時(shí)間:[{1}]
messages_en_US.properties:
userinfo=Current Login user: [{0}] Login time:[{1}]
測(cè)試
import java.util.Calendar;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
publicclass TestAction {
publicstaticvoid main(String[] args) {
ApplicationContext ctx2=new
ClassPathXmlApplicationContext("applicationContext.xml");
Object[] arg = new Object[]{
"Erica",
Calendar.getInstance().getTime()
};
// 以系統(tǒng)默認(rèn)Locale加載信息(對(duì)于中文WinXP而言,默認(rèn)為zh_CN)
String msg = ctx2.getMessage("userinfo", arg,Locale.US);
System.out.println("Message is ===> "+msg);
}
}
結(jié)果
Message is ===> Current Login user: [Erica] Login time:[3/23/09 12:20 PM]
2) 資源訪問(wèn)
ApplicationContext.getResource方法提供了對(duì)資源文件訪問(wèn)支持,如:
Resource rs = ctx.getResource("classpath:config.properties");
File file = rs.getFile();
上例從CLASSPATH根路徑中查找config.properties文件并獲取其文件句柄。
getResource方法的參數(shù)為一個(gè)資源訪問(wèn)地址,如:
file:C:/config.properties
/config.properties
classpath:config.properties
注意getResource返回的Resource并不一定實(shí)際存在,可以通過(guò)Resource.exists()方法對(duì)
其進(jìn)行判斷。
3)事件傳播
ApplicationContext基于Observer模式(java.util包中有對(duì)應(yīng)實(shí)現(xiàn)),提供了針對(duì)Bean的事件傳
播功能。通過(guò)Application. publishEvent方法,我們可以將事件通知系統(tǒng)內(nèi)所有的
ApplicationListener。
posted on 2009-03-23 12:39
重慶理工小子 閱讀(432)
評(píng)論(0) 編輯 收藏 所屬分類:
Spring2