【sping揭秘】7、国际化信息支持
Spring提供messagesource接口,来进行国际化事务处理
Applicationcontext会优先找一个名为messageSouce的messageSource接口实现bean,如果找不到那么内部会默认实例化DelegatingMessageSource(书中表示是:StaticMessageSource)实例
我们暗中观察一波源码,通过源码我们发现在spring5中其实默认实现的是DelegatingMessageSource对象:
但是通常一般配置方式是自己配置一个名称为messageSource的bean对象,使用的是ResourceBundleMessageSource对象
这里我们先手动使用一次
1、 先修改配置文件,配置上对应的bean
<!-- 国际化配置 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>i18/users</value> <value>i18/errormsg</value> </list> </property> </bean>
2、 新增对应的i18文件
根据这个配置,写个demo测试一下
package spring.messagesource; import java.util.Locale; import org.junit.Test; import org.springframework.context.MessageSource; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 测试spring的国际化 * * @author xiaof * */ public class I18Demo { @Test public void test1() { MessageSource resources = new ClassPathXmlApplicationContext("classpath:applicationContext-bean.xml"); String admin = resources.getMessage("user.admin", null, "Default", new Locale("us")); System.out.println(admin); String superadmin = resources.getMessage("user.superadmin", null, "Default", new Locale("us")); System.out.println(superadmin); String name = resources.getMessage("errormsg.name", null, "Default", new Locale("us")); System.out.println(name); String pwd = resources.getMessage("errormsg.pwd", null, "Default", new Locale("us")); System.out.println(pwd); } }
测试结果: