Spring的MessageSource配置细节

Spring的MessageSource有两个常用的实现 ReloadableResourceBundleMessageSourceResourceBundleMessageSource。这两个类在配置上有些区别。
 
我原来常用 ResourceBundleMessageSource,它的典型配置如下:
 
                        class="org. springframework. context. support. ReloadableResourceBundleMessageSource">
                 
               
                       
                                resources.cls-web-resources
                                resources.cls-web-resources-definitions
                                resources.cls-web-resources-menu
                       

               

       
 
在比较一下 ReloadableResourceBundleMessageSource 的配置:
                class="org. springframework. context. support. ReloadableResourceBundleMessageSource">
               
                false
               
                       
                                classpath:resources /cls-web-resources
                                classpath:resources /cls-web-resources-definitions
                                classpath:resources /cls-web-resources-menu  
                       

               

       
 
原因在于 ReloadableResourceBundleMessageSource的内部使用DefaultResourceLoader来装载ResourceBundle,而 ResourceBundleMessageSource 内部是直接使用java.util.ResourceBundle.getBundle(String baseName, Locale locale, ClassLoader loader) 来获取i18n文件信息的,而ResourceBundle是使用“.”来作为basename分隔符的(这也是我们常用的形式),所以很前面的配置有些区别。
 
另外如果你不设置“ fallbackToSystemLocale”的话,那么当你传入的Locale是null或者ResourceBundle没有该Locale的配置文件的话,那么会返回Locale.getDefault()的Locale下的 Message该设置默认为True,也就是说,如果找不到相应的ResourceBundle,系统始终会显示为中文的 Resource建议关掉该设置,否则fallBackLocale久没有什么意义了
 
另外还有一个有用的设置“ useCodeAsDefaultMessage”, 默认为false,这样当Spring在ResourceBundle中找不到messageKey的话,就抛出NoSuchMessageException,把它设置为True,则找不到不会抛出异常,而是使用messageKey作为返回值。

你可能感兴趣的:(spring)