`
yjshengshe
  • 浏览: 204528 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring的MessageSource配置细节

 
阅读更多

Spring的MessageSource有两个常用的实现ReloadableResourceBundleMessageSourceResourceBundleMessageSource。这两个类在配置上有些区别。
 
我原来常用ResourceBundleMessageSource,它的典型配置如下:
 
        <bean id="messageSource" 
               class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
                <property name="parentMessageSource" ref="bizMessageSource"/> 
                <property name="basenames"> 
                        <list> 
                                <value>resources.cls-web-resources</value> 
                                <value>resources.cls-web-resources-definitions</value> 
                                <value>resources.cls-web-resources-menu</value>
                        </list> 
                </property> 
        </bean>
 
在比较一下ReloadableResourceBundleMessageSource的配置:
<bean id="messageSource" 
               class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
                <property name="parentMessageSource" ref="bizMessageSource"/> 
                <property name="fallbackToSystemLocale"><value>false</value></property> 
                <property name="basenames"> 
                        <list> 
                                <value>classpath:resources/cls-web-resources</value> 
                                <value>classpath:resources/cls-web-resources-definitions</value> 
                                <value>classpath:resources/cls-web-resources-menu</value>  
                        </list> 
                </property> 
        </bean>
 
原因在于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 加载多个配置文件

    Spring 提供了多种机制来加载和管理多个配置文件,确保应用程序能够灵活地组织和维护其配置细节。 ##### 3.1 ApplicationContext 加载多个配置文件 `ApplicationContext` 是 Spring 的核心接口之一,用于提供Bean...

    spring源码中英文注释

    9. **国际化与本地化**:Spring提供了`MessageSource`接口来支持多语言环境。源码中会涉及资源文件的加载和消息的查找。 10. **SpEL(Spring Expression Language)**:Spring的表达式语言用于在运行时查询和操作...

    spring-boot源码

    10. **国际化的支持**:Spring Boot通过`MessageSource`支持多语言,配置在`spring-boot-autoconfigure`模块中。`@MessageSource`注解用于加载资源文件,如`messages.properties`。 11. **日志系统**:Spring Boot...

    spring3.0帮助文档

    以上只是Spring 3.0配置知识的一部分,实际文档中会涵盖更多细节,包括如何配置数据源、事务管理、缓存、任务调度等,以及如何使用Spring的测试框架进行单元测试和集成测试。通过深入学习和理解这些配置机制,开发者...

    spring2.5.6源代码及api

    通过对Spring 2.5.6源代码的深入学习,开发者可以更好地理解Spring的设计原则和实现细节,这将有助于在实际项目中更有效地使用Spring框架,并为后续版本的学习打下坚实基础。API文档则提供了关于各个类和方法的详细...

    spring-web-3.0.6.release.jar.zip

    Spring Web提供了方便的国际化支持,通过消息源(MessageSource)接口,可以实现根据不同区域显示不同语言的内容。开发者可以定义不同语言的资源文件,Spring会自动选择合适的资源进行显示。 六、文件上传与下载 ...

    Spring IoC源码深度剖析开源架构源码2021.pdf

    - Spring提供了多种具体的 `ApplicationContext` 实现,例如 `ClassPathXmlApplicationContext` 和 `AnnotationConfigApplicationContext`,分别用于解析XML配置和注解配置。 2. **BeanDefinition对象** - 在...

    springframework2.0

    7. **国际化和本地化**:Spring 2.0支持多语言环境,通过ResourceBundle和MessageSource接口,开发者可以轻松实现应用的国际化和本地化。 8. **测试支持**:Spring 2.0提供了全面的测试框架,包括Mock对象、JUnit...

    spring 2.5开发手册

    在《Spring 2.5 开发手册》中,会详细解释这些特性的使用方法、配置细节以及最佳实践,帮助开发者充分利用Spring框架,构建稳定、高效的应用系统。通过阅读这份手册,开发者可以深入理解Spring 2.5的工作原理,提升...

    spring live 中文版

    - **国际化和MessageSource**:本书探讨了如何利用Spring的MessageSource进行国际化支持。 - **事件的发布和订阅**:Spring框架支持事件驱动的编程模型,本书介绍了如何实现事件的发布和订阅机制。 - **进一步看一下...

    spring-mvc-showcase

    Spring MVC 是一种轻量级的Web框架,它将业务逻辑、数据访问和用户界面分离开来,使得开发者可以更专注于业务处理,而不必关心过多的Web细节。该框架通过DispatcherServlet作为入口点,处理所有HTTP请求,并根据配置...

    Spring MVC 入门教程

    ### Spring MVC 入门教程详解 #### 一、Spring MVC框架概述 Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它遵循Model-View-Controller...理解其核心概念和配置细节,对于开发人员来说至关重要。

    spring boot+JPA+easyUI 实现基于浏览器语言的国际化配置

    在Spring Boot应用中,可以通过`@MessageSource`注解和`MessageSource` bean来访问这些消息资源。 2. **基于浏览器语言的检测** 浏览器会发送一个`Accept-Language`头部,其中包含了用户偏好语言的信息。Spring ...

    spring-framework-3.0.0.RELEASE-with-docs

    9. **国际化和本地化**:Spring 3.0增强了国际化和本地化处理,通过`MessageSource`接口,可以方便地实现多语言环境下的消息显示。 10. **Web Flow集成**:Spring Web Flow是Spring框架的一部分,用于处理复杂的...

    spring mvc简单demo可以运行

    具体细节可能包括HelloWorld控制器、简单的视图、必要的配置以及可能的测试用例。这样的项目对学习者来说非常有用,因为他们可以直接运行代码,看到结果,从而更好地理解和学习Spring MVC的工作原理。

    基于MVC框架的SpringWeb应用程序源码

    6. **错误处理和国际化支持**: 登录失败后的提示信息可能需要本地化处理,Spring MVC支持通过MessageSource接口配置多语言资源文件,根据用户首选的语言显示对应的消息。 7. **DispatcherServlet**: 是Spring MVC的...

    spring2.0api文档

    8. **国际化**:Spring支持多语言环境,提供了MessageSource接口,可以方便地实现应用程序的国际化和本地化。 9. **Web服务**:Spring 2.0支持SOAP和RESTful Web服务的创建,通过WebServiceTemplate和RestTemplate...

    spring mvc框架

    它作为Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构,简化了前端控制器的实现,使得开发者可以专注于业务逻辑而不必关心太多的底层细节。 在Spring MVC中,以下是一些核心概念和知识点: 1. **...

Global site tag (gtag.js) - Google Analytics