您的位置:首页 > 移动开发

Spring AppliactionContext功能介绍

2013-04-23 13:39 253 查看
上一篇博客提到了Spring bean的基本配置,以及Spring IOC概念和用途,以及两种注入方式,这一篇我们讲述 AppliactionContext相比BeanFactory多的功能

AppliactionContext是BeanFactory的子类,顾名思义,功能强大与它。。。

第一:我们来看下Spring对国际化的支持

下面通过一个例子看一下Spring对国际化的支持和管理。。

首先在src目录下建立两个国际化资源文件,messages_zh_CN.properties 和 messages_en_US.properties

国际化资源文件的命名规则:basename_语言_国家。这里messages代表basename , zh代表语言名,CN代表国家名

两个文件中的内容很简单。messages_zh_CN.properties里

hello={0},\u4F60\u597D\u6B22\u8FCE\u4F60
loginTitle={0},\u606D\u559C\u4F60,{1}


在messages_en_US.properties里

hello={0},Hello,You are welcome
loginTitle={0},Congratulation{1}


上面两个文件里,hello和loginTitle表示国际化资源文件的Key  等号后面的value 。。。取值是根据key来取的,这里的{0} {1}表示通配符,需要传值,就这么简单

要实现国际化,还需在配置文件里加入Spring对国际化的管理,Spring中ResourceBundleMessageSource类专门处理国际化,接下来看一下beans.xml

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>messages</value>
</list>
</property>
</bean>
注意 : 查看API文档,会发现ResourceBundleMessageSource类中有个setBasenames(String... basenames)的方法,这个方法的参数是一个String类型的数组,String[] basenames。。。这个参数 传入的就是国际化资源文件的basename
, 这里对应的messages  。。。同时在set注入时,碰到参数为数组类型时,可以用<list>

<value></value>

</list>

这种配置。。。

最后看一下测试类。。很简单 直接调用ApplicationContext提供的getMessage方法,传入三个参数,第一个:国际化资源文件的key,第二个:去国际化资源文件中通配符匹配,是一个String[]类型,第三个:Locale.国家

package com.tlf.test;

import java.util.Locale;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {

public static void main(String[] args) {

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
System.out.println(ctx.getMessage("hello", new String[]{"唐三藏","沙悟净"}, Locale.CHINA));
System.out.println(ctx.getMessage("hello", new String[]{"猪八戒"}, Locale.US));
}

}


运行程序,最后控制台打印



第二:来看一下AppliactionContext加载多个配置文件

ApplicationContext经常用到的三个实现:

1.ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息。把上下文定义文件当成类路径资源。

2.FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。

3.XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息。

加载多配置很简单,直接使用ApplicationContext ctx = new ClassPathXmlApplicationContext("a.xml","b.xml.....")

括号参数传入多个String类型的参数就行。。。

这句话其实是ApplicationContext预初始化Spring容器中所有的singleton Bean...至于什么是singleton Bean,以及还能配置什么Bean,在下一篇Bean的作用域会说到。。

第三:AppliactionContex对资源访问的支持

1、classpath : 从类路径加载

2、ftp:从网络加载,基于FTP协议加载

3、http:从网络加载,基于http协议加载

这里就介绍一下第一种方式,

在src下建立aaa.txt。。。。内容是

啊啊啊啊,,,你是谁
我是猪八戒


接下来看下主方法,Spring如何加载他。。。

Resource res = ctx.getResource("classpath:aaa.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(res.getInputStream()));
String line = null;
while((line=br.readLine())!=null){
System.out.println(line);


很简单,用Resource res = ctx.getResource("classpath:aaa.txt"); 这句话就表明加载classpath下aaa.txt文件,接下来的是对其进行的操作

最后控制台打印


今天就写到这,下一篇将阐述Spring中Bean的作用域以及依赖注入P命名空间和嵌套Bean
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: