将Spring自带的org.springframework.context.support.ResourceBundleMessageSource类注册到bean.xml中,这个类的作用是获取资源文件的内容,注册到IoC的bean.xml文件中是为了自动获得此类的对象(Spring做了一些简化编程的处理)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="Chinese" class="cn.com.chengang.spring.Chinese"/>
<bean id="American" class="cn.com.chengang.spring.American"/>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>cn.com.chengang.spring.messages</value>
</list>
</property>
</bean>
</beans>
代码说明:
l id="messageSource" 的设置是不变的、必须的。
l ResourceBundleMessageSource是Spring的一个Message类。这里还有一个选择,用ReloadableResourceBundleMessageSource类,此类可以提供不用重启即可重新加载资源文件的特性(前者对资源文件只加载一次)。对于那种有热修改资源文件的需求,后者比较合适,只是后者在效率上有可能有损耗,因为至少要多一些检查资源文件是否改变的代码(这只是我的猜测,我没有仔佃去读这段的源码)。
l “basenames”是不变的、必须的。它是ResourceBundleMessageSource的一个属性,在源代码中的定义是“private String[] basenames;”,可见它是一个字符串数组。
l “cn.com.chengang.spring.messages”是把资源文件的位置传入到basenames属性中。注意:三个资源文件只需要将共同的主名(红色字体)传入:messages.properties、messages_zh_CN.properties、messages_zh_TW.properties。
3、使用。修改MessageTest类,如下
package cn.com.chengang.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class MessageTest {
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
String str = ctx.getMessage("chengang", null, null);
System.out.println(str);
}
}
代码说明:
(1)main方法里
l 第一句取得bean.xml文件的配置信息。
l 第二句从资源文件里得到键值chengang对应的字符串。
l 第三句将字符串打印出来,结果是打印的是“陈刚”,说明读取的是messages_zh_CN.properties资源文件。
(2)ctx.getMessage("chengang", null, null);有三个参数:
l 第一个是资源文件的键值;
l 第二个是资源文件字符串的参数,由于本字符串没有参数,所以用一个null(后面给出了一个用到字符串参数的实例);
l 第三个是一个java.util. Locale类型的参数。参数为null,则表示根据使用者的语言环境来选择Locale,因为我用的是中文版的windows,所以在取字符串时它自动选择了messages_zh_CN.properties资源文件。
这其中还有一个控制点在JVM,JVM会根据当前操作系统的语言环境进行相应处理,我们可以通过在JVM启动参数中追加“-Duser.language=zh_TW”来设定当前JVM语言类型,通过JVM级的设定,也可以实现自动切换所使用的资源文件类型。
所以这里面的控制语言的方式有三种:从最低层的操作系统的Locale设定,到更上一层的JVM的Locale设定,再到程序一级的Locale设定。
3.3 资源文件的其他使用方式:
package cn.com.chengang.spring;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.context.support.ResourceBundleMessageSource;
public class MessageTest {
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
String str = ctx.getMessage("chengang", null, null);
System.out.println(str); //输出“陈刚”
/*
* 使用了messages.properties
*/
str = ctx.getMessage("chengang", null, new Locale(""));
System.out.println(str);//输出“Giles”
/*
* 使用了messages_zh_CN.properties
*/
str = ctx.getMessage("chengang", null, new Locale("zh", "CN"));
System.out.println(str);//输出“陈刚”
/*
* 使用了messages_zh_TW.properties
*/
str = ctx.getMessage("chengang", null, new Locale("zh", "TW"));
System.out.println(str);//输出“陳剛”
/*
* 使用了messages_zh_TW.properties,从这里可见资源文件的起名可以很随意,
* 比如我们建立一个messages_123.properties,在传参数时候就可以这样:
* new Locale("123"),一样也可以取出messages_123.properties中的值
*/
str = ctx.getMessage("chengang", null, new Locale("zh_TW"));
System.out.println(str);//输出“陳剛”
/*
* 当找不到相应的资源文件时,使用了messages_zh_CN.properties
*/
str = ctx.getMessage("chengang", null, new Locale("abcd"));
System.out.println(str);//输出“陈刚”
/**
* 不通过IoC注册,直接使用ResourceBundleMessageSource类的写法。
*/
ResourceBundleMessageSource s = new ResourceBundleMessageSource();
s.setBasename("cn.com.chengang.spring.messages");
str = s.getMessage("chengang", null, null);
System.out.println(str);//输出“陈刚”
}
}
代码说明:
前面说过控制语言的方式有三种:从最低层的操作系统的Locale设定,到更上一层的JVM的Locale设定,再到程序一级的Locale设定。我认为最佳的方法是在程序一级进行控制:定义一个统一的Locale静态变量,然后整个系统中只使用这一个变量,以后就可以通过界面操作设置此Locale变量的值,让用户来选择他所需的软件语言。而且我们也可以将此静态变量设成null值,来自动选择资源文件。
另外,Locale里也定义了一些常量,我们可以直接使用而不必去new一个Locale对象,如:“Locale.ENGLISH”。
---摘自http://xp84012493.iteye.com/blog/199627
发表评论
-
spring的扩展点--PropertyPlaceholderConfigurer
2010-05-05 14:01 1044它的作用是一个资源属性的配置器,能够将BeanFactory的 ... -
ApplicationContextAware
2010-03-30 14:36 1121JDK-doc 2.5.6 Interface Applic ... -
org.springframework.beans.factory.BeanCreationException: Error creating bean wit
2010-01-24 18:45 3734org.springframework.beans.facto ... -
SPRING框架的7大模块
2008-08-23 16:48 948核心容器:核心容器 ... -
使用Spring编写第一个程序-spring初级体验
2008-08-23 16:52 755对最原始的HelloWorld.java ... -
Spring中BeanFactory配置文件的元素解析
2008-08-24 11:39 713<?xml version="1.0" ... -
使用Lookup方法注射方法
2008-08-24 17:46 658spring方法解决下面的问题:一个singleton bea ... -
替换任意的方法
2008-08-24 18:06 805在spring中不但提供了Lookup方法来注射方法,还提供了 ... -
一个普通表单控制器(SimpleFornController)处理视图流转的例子
2008-08-26 09:40 743Spring附有一些简单的窗体处理handler,这些hand ... -
SimpleFormController简单表单控制器的处理流程
2008-08-26 10:19 8341.当表单控制器接 ... -
SPRING分发器(DispatcherServlet)
2008-09-09 00:15 1313分发器(DispatcherServlet) Sprin ... -
Spring的View和ViewResolver的使用
2008-09-11 23:15 1487打开Spring的源代码,我们可以在org.springfra ... -
ModelAndView解析
2008-09-16 09:39 1235查看spring的帮助文档得到以下信息: org.sprin ... -
spring验证器Validator接口
2008-09-16 21:30 2577spring2.0 Validator接口 ... -
spring web mvc配置
2008-09-17 11:04 1095spring内建一个请求驱动 ... -
spring视图解析器
2008-09-17 15:21 1308spring最常用的JSP/JSTL视图解析器是: Int ... -
Spring dataSource配置
2010-01-23 13:40 1783不管通过何种持久化 ... -
AOP(Aspect Oriented Programming ) 面向切面编程
2010-01-23 13:38 812AOP是什么? AOP是OO ...
相关推荐
spring messageSource功能结合ehcache实现提示语句从数据库读取demo,注:sql脚本都在代码中,如有问题及时沟通指点。
使用普通的旧MessageSource简单的错误消息插值。 可自定义的HTTP错误表示形式。 将参数从异常公开到错误消息。 同时支持传统和React堆。 可自定义的异常日志记录。 支持错误指纹识别。 入门 下载 下载或通过...
3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 4.2. ...
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
介绍 无论您是否意识到,您创建的软件都具有全球市场。 也许比任何其他行业的任何其他产品都更重要的是,从一个小的、个人的努力开始的代码有可能Swift发展成一种在世界各地...Spring 对内部化和本地化的支持 与 Java
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
为模板引擎提供t函数,它从 Spring MessageSource 检索消息。 {{ t('users.show.title') }} “懒惰”查找 函数支持,因此您可以在users/show.html查找users.show.title消息,例如: {{ t('.title') }} 没有模板...
例子@Controllerpublic class AutowiredParamController {/** * Handles A requests * @param param an example url parameter * @param messageSource the MessageSource from the application context, * injected...
Spring和其它的框架一样,也提供了国际化功能,它是通过MessageSource接口来实现的 ApplicationContext接口继承了MessageSource 。 MessageSource接口方法
基于数据库MessageSource的国际化 依赖注入 EJB启动Bean 没有测试,可耻的是我:) 注意:此示例仅包含基于xml的配置。 是相同项目模板的链接,但具有基于注释的配置。 要运行此应用程序,请安装Jboss AS 7.1.1,并...
Spring 项目模板(基于注解) 此项目模板与完全相同,但使用注释代替 XML ...基于数据库MessageSource的国际化 依赖注入 EJB 启动 Bean 要运行此应用程序,请安装 Jboss AS 7.1.1 并在必要时修改 deploy-script.bat。
BootLoginService 本项目为基于Spring-Boot、Spring-Security的登录功能 作者邮箱: Spring Boot 用户登录功能实现session共享,踢出用户,锁定用户等。
Spring2.5的国际化配置 基于浏览器语言的国际化...<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="message-info" /> ...
3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 ...
不用重新启动服务器就可以进行重新加载利用内置的Spring 容器实现依赖注入基于Spring的MessageSource核心概念,提供了对国际化(i18n)的支持基于Spring事务抽象概念,实现事务服务层 借助于功能强大的Groovy动态...
3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 ...
3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...
不用重新启动服务器就可以进行重新加载利用内置的Spring 容器实现依赖注入基于Spring的MessageSource核心概念,提供了对国际化(i18n)的支持基于Spring事务抽象概念,实现事务服务层 借助于功能强大的Groovy动态...
3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...
基于Spring的MessageSource核心概念,提供了对国际化(i18n)的支持 基于Spring事务抽象概念,实现事务服务层 借助于功能强大的Groovy动态语言和领域特定语言(Domain Specific Language,DSL),以上那些特性变得...