Spring IoC容器之国际化

ApplicationContext接口扩展了一个名为MessageSource的接口,提供了国际化功能。spring还提供了HierarchicalMessageSource接口,它可以分层解析消息。这些接口共同为spring特效消息解析提供了基础。

Spring IoC容器之国际化_第1张图片
MessageSource接口
Spring IoC容器之国际化_第2张图片
HierarchicalMessageSource接口

String getMessage(String code, Object[] args, String default, Locale loc):用于从MessageSource中检索消息的基本方法,当找不到指定语言环境的消息时,使用默认消息。使用标准库提供的MessageFormat功能,传入的任何参数都可以成为替换值。

String getMessage(String code, Object[] args, Locale loc):与上面的方法类似,但不能指定默认消息,如果无法找到消息,则抛出NoSuchMessageException异常。

String getMessage(MessageSourceResolvable resolvable, Locale loc):当上面方法中使用的所有属性都包含在MessageSourceResolvable类中,可以使用此方法。

Spring IoC容器之国际化_第3张图片
MessageSourceResolvable接口

当一个ApplicationContext被加载时,它会自动搜索上下文中定义的MessageSource bean,若找到这样的bean,所有对前面方法的调用都被委托给消息源。若没有找到消息源,ApplicationContext会尝试查找包含具有相同名称的bean的父项,此时它将使用该bean作为消息源。若ApplicationContext找不到任何消息源,则会实例化一个空DelegatingMessageSource,以便接受上面定义的方法调用。

MessageSource有两种实现:ResourceBundleMessageSource和StaticMessageSource。它们都实现了HierarchicalMessageSource,以便进行嵌套消息传递。StaticMessageSource提供了编程方式来添加消息源,但不常用。

Spring IoC容器之国际化_第4张图片
ResourceBundleMessageSource使用示例  

上例中定义了2个资源包:format和exceptions,任何解析消息的请求都将以JDK标准方式通过ResourceBundles解析消息。

format.properties
exceptions.properties
Spring IoC容器之国际化_第5张图片
执行MessageSource

运行结果:hello

上例中MessageSource被定义在beans.xml中,该文件放在类路径的根目录下。MessageSource bean定义通过其基本名称属性来引用资源包,在列表中传递给basenames属性的2个文件保存在类路径的根目录下,分别为format.properties和exceptions.properties。

Spring IoC容器之国际化_第6张图片
Spring IoC容器之国际化_第7张图片

运行结果:the userDao argument is required.


--参考文献《Srping5开发大全》

你可能感兴趣的:(Spring IoC容器之国际化)