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:お早うございます
?