【Java.Spring.Core】【IoC】ApplicationContext的附加功能(国际化,未完待续)
2015-01-12 00:09
441 查看
正如前面所述, org.springframework.beans.factory 包提供了管理和操纵beans的基本功能。org.springframework.context包增加了一个 ApplicationContext 接口,其扩展了 BeanFactory接口,使其更加适合应用程序的使用。为了另 BeanFactory 的功能更加适合作为一个框架来使用, context 包提供了下列的功能:通过 MessageSource 接口来以 i18n 方式来访问 message通过ResourceLoader接口访问资源,如URLs或者文件通过ApplicationEventPublicsher接口实现向实现了ApplicationListener接口的beans发送事件通过HierarchiaclBeanFactory接口加载多个Context,这可以另每个特定的Context用于特定的层次,例如应用程序的web层
使用MessageSource接口的国际化(i18n)
ApplicationContext接口继承了 MessageSource 接口,其提供了国际化( i18n) 的功能。Spring同时提供了HierarchicalMessageSource接口,可以用来继承地解析 message。这些接口共同用于 message 的解析。这些接口定义了如下的方法:String getMessage(String code, Object[] args, String default, Locale loc) - 从MessageSource中取出消息的基本方法;如果对于特定的locale,没有message被找到,则使用默认的message;传入的参数作为替代的值String getMessage(String code, Object[] args, Locale loc) - 与前面的方法基本相同,但是如果特定locale的message没有找到,没有默认的message可用,会抛出NoSuchMessageException异常String getMessage(MessageSourceResolvable resolvable, Locale locale) - 前面方法的参数被包裹在类MessageSourceResolvable的对象中Spring提供了两个MessageSource的实现类:ResourceBundleMessageSource和StaticMessageSource。它们都实现了HIerarchicalMessageSource接口。StaticMessageSource使用的较少。ResourceBundleMessageSource示例如下:<beans> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>format</value> <value>exceptions</value> <value>windows</value> </list> </property> </bean> </beans>在上面的例子中,我们在classpath可用的路径中定义了3个资源:format, exception, windows。任何解析 message的请求都将会由 ResourceBundles来解析。假设上例中的两个资源文件为:
# in format.properties message=Alligators rock!
# in exceptions.properties argument.required=The {0} argument is required.使用编程方式使用MessageSource的方式如下,
public static void main(String[] args) { MessageSource resources = new ClassPathXmlApplicationContext("beans.xml"); String message = resources.getMessage("message", null, "Default", null); System.out.println(message); }输出的结果如下:
Alligators rock!MessageSource bean定义在beans.xml 配置文件中。 messageSource bean的定义中依赖一些资源(resource bundles),其属性名为 basenames。传入 basenames 属性list中值为属性文件,分别是 format.properites, exceptions.properties, windows.properties。下面的例子展示了查找 message 时使用参数,这些参数被嵌入查找的message中的占位符中:
<beans> <!-- this MessageSource is being used in a web application --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="exceptions"/> </bean> <!-- lets inject the above MessageSource into this POJO --> <bean id="example" class="com.foo.Example"> <property name="messages" ref="messageSource"/> </bean> </beans>
public class Example { private MessageSource messages; public void setMessages(MessageSource messages) { this.messages = messages; } public void execute() { String message = this.messages.getMessage("argument.required", new Object [] {"userDao"}, "Required", null); System.out.println(message); } }execute方法的执行结果如下:
The userDao argument is required.另外的例子,如果希望解析British(en-GB) locale的message,需要创建文件:format_en_GM.properties, exceptions_en_GM.properties, windows_en_GB.properties。我们显示指定使用的Locale,
# in exceptions_en_GB.properties argument.required=Ebagum lad, the {0} argument is required, I say, required.
public static void main(final String[] args) {MessageSource resources = new ClassPathXmlApplicationContext("beans.xml");String message = resources.getMessage("argument.required",new Object [] {"userDao"}, "Required", Locale.UK);System.out.println(message);}输出的结果为:
Ebagum lad, the userDao argument is required, I say, required.我们也可以使用 MessageSourceAware 接口来获取任意定义的MessageSource 引用。我们也可以使用 ReloadableResourceBundleMessageSource 来替代 ResourceBundleMessageSource,其可以从任意Spring resource位置加载属性文件,并且可以实现属性文件的热加载。
标准/自定义事件
相关文章推荐
- 【Java.Spring.Core】【IoC】Beans
- 【Java.Spring.Core】【IoC】基于注解的Bean装配(非XML配置)
- 【Java.Spring.Core】【IoC】Bean依赖注入- Dependencies
- 【Java.Spring.Core】【IoC】自定义bean nature
- 【Java.Spring.Core】【IoC】注册LoadTimeWeaver
- 使用 Spring 2.5 注释驱动的 IoC 功能(转自http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/)
- 【Java.Spring.Core】【IoC】Bean定义的继承
- 使用Spring中的IoC功能来实现系统的国际化
- 理解Java Spring核心功能之一:控制反转容器(IOC Container)
- 【Java.Spring.Core】【IoC】Bean 作用域 - Scopes
- 【Java.Spring.Core】【IoC】IoC容器 - Container
- 使用Spring中的IoC功能来实现我们所开发项目系统的国际化
- 【Java.Spring.Core】【IoC】使用Classpath扫描向容器注册beans/components
- Spring学习笔记:IoC中的国际化
- Spring 2.5 注释 IoC 功能
- 使用 Spring 2.5 注释驱动的 IoC 功能
- 使用 Spring 2.5 注释驱动的 IoC 功能
- 使用 Spring 2.5 注释驱动的 IoC 功能(一)
- 使用spring2.5注释驱动的IOC功能
- 使用 Spring 2.5 注释驱动的 IoC 功能