读书人

spring 国际化(二)

发布时间: 2013-03-22 09:49:50 作者: rapoo

spring 国际化(2)

大家看了我写的spring 国际化(1)后,应该会发现如果要获取资源文件的信息时,需要将配置文件中的资源文件bean注入到你正在操作的bean以后,才能使用。

spring的做法是将国际化资源作成系统级别的,对任何组件都进行开放。

实现方法如下:

org.springframework.context.ApplicationContext这个接口也继承了org.springframework.context.MessageSource接口

spring容器在启动时会调用initMessageSource()方法,它的作用就是初始化容器中的国际化资源。

根据反射机制,从BeanDefinitionRegistry中找到名为“messageSource”并且类型为org.springframework.context.MessageSource的bean,将它加载为容器级的国际化资源文件。

?

例如:下面的xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:p="http://www.springframework.org/schema/p"       xsi:schemaLocation="http://www.springframework.org/schema/beans                            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">    <!-- 名城必须为messageSource, 类型必须为org.springframework.context.MessageSource -->    <!-- class为ResourceBundleMessageSource或ReloadableResourceBundleMessageSource都可以(区别已比较过) -->    <bean id="messageSource" name="code">package spring3.local;import java.util.Locale;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MessageResourceMain {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring3/local/message_resource.xml");System.out.println("CHINA:"+ context.getMessage("greeting.morning", null, Locale.CHINA));System.out.println("JAPAN:"+ context.getMessage("greeting.morning", null, Locale.JAPAN));System.out.println("US:"+ context.getMessage("greeting.morning", null, Locale.US));System.out.println("CANADA:"+ context.getMessage("greeting.morning", null, Locale.CANADA));}}

?输出结果

CHINA:早上好JAPAN:お早うございますUS:good night!CANADA:お早うございます

?

读书人网 >软件架构设计

热点推荐