javascript
Spring-国际化信息03-容器级的国际化信息资源
- 導讀
- 概述
- 實例
- 注意事項
導讀
Spring-國際化信息01-基礎知識
Spring-國際化信息02-MessageSource接口
Spring-國際化信息03-容器級的國際化信息資源
概述
我們查看ApplicationContext中的源碼可以看到
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolverApplicationContext 實現了 MessageSource 接口。
在一般情況下,國際化信息資源應該是容器級。我們一般不會將MessageSource作為一個Bean注入到其他的Bean中,相反MessageSource作為容器的基礎設施向容器中所有的Bean開放。
國際化信息一般在系統輸出信息時使用,如Spring MVC的頁面標簽,控制器Controller等,不同的模塊都可能通過這些組件訪問國際化信息,因此Spring就將國際化消息作為容器的公共基礎設施對所有組件開放。
Spring根據反射機制從BeanDefinitionRegistry中找出名稱為“messageSource”且類型為org.springframework.context.MessageSource的Bean,將這個Bean定義的信息資源加載為容器級的國際化信息資源.
實例
代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster
資源文件
greeting.common=How are you {0}?,today is {1} greeting.morning=Good Morning {0}! now is {1,time,short} greeting.afternoon=Good Afternoon {0}! now is {1,date,long}配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><!--①注冊資源Bean,其Bean名稱只能為messageSource --> <bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"><property name="basenames" ref="resourceList"/></bean><util:list id="resourceList"><value>i18n/fmt_resource</value></util:list></beans>測試類
package com.xgj.ioc.i18n.container;import java.util.GregorianCalendar; import java.util.Locale;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class ContainerI18NTest {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/xgj/ioc/i18n/container/beans.xml");// 動態參數Object[] params = { "XiaoGongJiang", new GregorianCalendar().getTime() };// 直接通過容器訪問國際化信息String msg1 = ctx.getMessage("greeting.common", params, Locale.US);String msg2 = ctx.getMessage("greeting.morning", params, Locale.CHINA);System.out.println(msg1);System.out.println(msg2);} }運行結果:
注意事項
MessageSource Bean名字必須命名為“messageSource”,以上代碼將拋出NoSuchMessageException異常
假設我們將id=”messageSource” 改為 id=”messageSource1”
再此運行
總結
以上是生活随笔為你收集整理的Spring-国际化信息03-容器级的国际化信息资源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring-国际化信息02-Messa
- 下一篇: Spring-AOP概述