国际化信息支持(I18n MessageSource)

Java SE 提供的国际化支持

对于Java中的国际化信息处理,主要涉及两个类,即java.util.Localejava.util.ResourceBundle

  • Locale

不同的Locale代表不同的国家和地区,每个国家和地区在Locale这里都有相应的简写代码表示,包括语言代码以及国家代码,这些代码是ISO标准代码。

  • ResourceBundle

ResourceBundle用来保存特定于某个Locale的信息(可以是String类型信息,也可以是任何类型的对象)。通常,ResourceBundle管理一组信息序列,所有的信息序列有统一的一个basename,然后特定的Locale的信息,可以根据basename后追加的语言或者地区代码来区分。

MessageSource与ApplicationContext

Spring在JavaSE的国际化支持的基础上,进一步抽象了国际化信息的访问接口,也就是org.springframework.context.MessageSource,该接口定义如下:

 
    
    public interface MessageSource {
    	String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
    	String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException;
    	String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessage zException;
    }
    

通过该接口,我们统一了国际化信息的访问方式。传入相应的Locale、资源的键以及相应参数,就可以取得相应的信息,再也不用先根据Locale取得ResourceBundle,然后再从ResourceBundle查询信息了。

(这里不做详细介绍,更多可以看原文)

容器内部事件发布

(这里不做介绍,更多可以看原文)

多配置模块加载的简化

实际上,这也不算ApplicationContext比较突出的特色功能,只是相对于BeanFactory来说,在这一点上做得更好罢了。

我们知道,在使用Spring的IoC轻量级容器进行实际开发的过程中,为了避免出现整个团队因某个资源独占而无法并行、高效地完成工作等问题,通常会将整个系统的配置信息按照某种关注点进行分割,使得关注点逻辑良好地划分到不同的配置文件中,如按照功能模块或者按照系统划分的层次等。

这样,在加载整个系统的bean定义时,就需要让容器同时读入划分到不同配置文件的信息。相对于BeanFactory来说,ApplicationContext大大简化了这种情况下的多配置文件的加载工作。

(这里不做详细介绍,更多可以看原文)

小结

ApplicationContext是Spring在BeanFactory基础容器之上,提供的另一个IoC容器实现。 它拥有许多BeanFactory所没有的特性,包括统一的资源加载策略、国际化信息支持、容器内事件发布以及简化的多配置文件加载功能