ApplicationContext学习

ApplicationContext学习
   

ApplicationContext学习

相对BeanFactory而言,ApplicationContext提供了以下扩展功能:

 

1国际化支持

我们可以在Beans.xml文件中,对程序中的语言信息(如提示信息)进行定义,将程序中的提示

信息抽取到配置文件中加以定义,为我们进行应用的各语言版本转换提供了极大的灵活性。

2资源访问

支持对文件和URL的访问。

3事件传播

事件传播特性为系统中状态改变时的检测提供了良好支持。

4多实例加载

可以在同一个应用中加载多个Context实例。

 下面我们就这些特性逐一进行介绍。

1)    国际化支持

 配置文件

<beans>

     <description>Spring Quick Start</description>

 <bean id="messageSource" <!—注意,这里名字必须为messageSource -->

class="org.springframework.context.support.ResourceB

undleMessageSource">

   <property name="basenames">  

     <list>

       <value>messages</value>

     </list>

   </property>

 </bean>

</beans>

在配置节点中,我们指定了一个配置名“messages”。Spring会自动在CLASSPATH根路径中按照如下顺序搜寻配置文件并进行加载(以Localezh_CN为例):

messages_zh_CN.properties

messages_zh.properties

messages.properties

messages_zh_CN.class

messages_zh.class

messages.class

再加入二个properties文件

示例中包含了两个配置文件,内容如下:

messages_zh_CN.properties

 

userinfo=当前登录用户: [{0}] 登录时间:[{1}]

 

messages_en_US.properties

 

userinfo=Current Login user: [{0}] Login time:[{1}]

测试

import java.util.Calendar;

import java.util.Locale;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

publicclass TestAction {

    publicstaticvoid main(String[] args) {

         ApplicationContext ctx2=new 

        ClassPathXmlApplicationContext("applicationContext.xml");

               Object[] arg = new Object[]{

        "Erica",

        Calendar.getInstance().getTime()

        };

//     以系统默认Locale加载信息(对于中文WinXP而言,默认为zh_CN)

        String msg = ctx2.getMessage("userinfo", arg,Locale.US);

               System.out.println("Message is ===> "+msg);

    }  

}

结果

Message is ===> Current Login user: [Erica] Login time:[3/23/09 12:20 PM]

 

 2) 资源访问

ApplicationContext.getResource方法提供了对资源文件访问支持,如:

 Resource rs = ctx.getResource("classpath:config.properties");

File file = rs.getFile();

上例从CLASSPATH根路径中查找config.properties文件并获取其文件句柄。

getResource方法的参数为一个资源访问地址,如:

file:C:/config.properties

/config.properties

classpath:config.properties

注意getResource返回的Resource并不一定实际存在,可以通过Resource.exists()方法对

其进行判断。

3)事件传播

ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传

播功能。通过Application. publishEvent方法,我们可以将事件通知系统内所有的

ApplicationListener

你可能感兴趣的:(ApplicationContext学习)