? String getMessage(String code, Object[] args, String defaultMessage, Locale locale)
code表示國際化資源中的屬性名;
args用于傳遞格式化串占位符所用的運(yùn)行期參數(shù);當(dāng)在資源找不到對應(yīng)屬性名時(shí),返回defaultMessage參數(shù)所指定的默認(rèn)信息;
locale表示本地化對象;
? String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException與上面的方法類似,只不過在找不到資源中對應(yīng)的屬性名時(shí),直接拋出NoSuchMessageException異常;
? String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException
MessageSourceResolvable 將屬性名、參數(shù)數(shù)組以及默認(rèn)信息封裝起來,它的功能和第一個(gè)接口方法相同。
MessageSource的類結(jié)構(gòu)
MessageSource分別被HierarchicalMessageSource和ApplicationContext接口擴(kuò)展,這里我們主要看一下HierarchicalMessageSource接口的幾個(gè)實(shí)現(xiàn)類,如圖5-7所示。
![]() |
HierarchicalMessageSource接口添加了兩個(gè)方法,建立父子層級的MessageSource結(jié)構(gòu),類似于前面我們所介紹的HierarchicalBeanFactory。
該接口的setParentMessageSource (MessageSource parent)方法用于設(shè)置父MessageSource,而getParentMessageSource()方法用于返回父MessageSource。
HierarchicalMessageSource接口最重要的兩個(gè)實(shí)現(xiàn)類是
ResourceBundleMessageSource
和
ReloadableResourceBundleMessageSource
。它們基于Java的ResourceBundle基礎(chǔ)類實(shí)現(xiàn),允許僅通過資源名加載國際化資源。
ReloadableResourceBundleMessageSource 提供了定時(shí)刷新功能,允許在不重啟系統(tǒng)的情況下,更新資源的信息。
StaticMessageSource 主要用于程序測試,它允許通過編程的方式提供國際化信息。
DelegatingMessageSource
是為方便操作父MessageSource而提供的代理類。
ResourceBundleMessageSource
該實(shí)現(xiàn)類允許用戶通過beanName指定一個(gè)資源名(包括類路徑的全限定資源名),或通過beanNames指定一組資源名。
在代碼清單5-15中,我們通過JDK的基礎(chǔ)類完成了本地化的操作,下面我們使用ResourceBundleMessageSource來完成相同的任務(wù)。讀者可以比較兩者的使用差別,并體會(huì)Spring所提供的國際化處理功能所帶給我們的好處:
![]() |
![]() |
比較代碼清單5-15中的代碼,我們發(fā)現(xiàn)最主要的區(qū)別在于我們無須再分別加載不同語言、不同國家/地區(qū)的本地化資源文件,僅僅通過資源名就可以加載整套的國際化資源文件。此外,我們無須顯式使用MessageFormat操作國際化信息,僅通過MessageSource# getMessage()方法就可以完成操作了。這段代碼的運(yùn)行結(jié)果與代碼清單5 15的運(yùn)行結(jié)果完全一樣。
ReloadableResourceBundleMessageSource
前面,我們提到該實(shí)現(xiàn)類比之于ResourceBundleMessageSource的唯一區(qū)別在于它可以
定時(shí)刷新資源文件
,以便在應(yīng)用程序不重啟的情況下感知資源文件的變化。很多生產(chǎn)系統(tǒng)都需要長時(shí)間持續(xù)運(yùn)行,系統(tǒng)重啟會(huì)給運(yùn)行帶來很大的負(fù)面影響。這時(shí),通過該實(shí)現(xiàn)類就可以解決國際化信息更新的問題。請看下面的配置:
![]() |
我們編寫一個(gè)測試類對上面配置的ReloadableResourceBundleMessageSource進(jìn)行測試:
![]() |
---How are you!{0},today is {1}---
我們將看到兩次輸出的格式化信息分別對應(yīng)更改前后的內(nèi)容,也即本地化資源文件的調(diào)整被自動(dòng)生效了:
How are you!John,today is 1/9/07 4:55 PM
---How are you!John,today is 1/9/07 4:55 PM---
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
