ApplicationContext是一个IoC容器,但它扩展了IoC容器的许多功能:例如像资源的获取,国际化,事件的处理和传播等,你可以基于Spring容器来打造自己的应用程序框架。
首先我们通过ApplicationContext的源代码分析一下:
public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
...
}
资源的获取:
Spring提供了对资源文件的泛型存取,ApplicationContext它继承了org.springframework.core.io.ResourceLoader接口,你可以使用getResource()方法并指定资源文件的URL来取的一个实现Resource接口的实例。
例如:Resource res=context.getResource("classpath:admin.properties");
国际化:
ApplicationContext它继承了org.springframework.context.MessageSource接口,你可以使用getMessage()的各种版本的方法来取得文字消息的资源文件,从而实现国际化消息的目的。
你可以通过MessageSource的一个实现ResourceBundleMessageSource来取得国际化消息。
下面我们来实例里来说明:
首先定义一个配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
">
<!-- basename 属性用来设置消息资源的前置档案文件名称,在这边设置是messages,表示
消息资源文件的名称可以是messages_en_US.properties等名称 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"></property>
</bean>
</beans>
接着提供资源文件:这里提供两个资源文件一个是美式英语系的,另一个是中文系的
messages_en_US.properties
userLogin=User {0} login at {1}
messages_zh_TW.properties(由于直接使用Big5中文编码容器出现乱码,这里使用native2ascii进行了编码的转换)
userLogin=\u7528\u6237 {0} \u4E8E {1} \u767B\u5F55
测试类:
package com.messagesource;
import java.util.Calendar;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MessageSourceDemo {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("beans-config.xml");
Object[] arguments=new Object[]{"乔彦辉",Calendar.getInstance().getTime()};
/*
* getMessage(String code, Object[] args, Locale locale)
* 第一个参数表示属性文件中的key
* 第二个参数表示填充参数列表
* 第三个参数表示语言
*/
System.out.println(ac.getMessage("userLogin",arguments,Locale.US));
System.out.println(ac.getMessage("userLogin",arguments,Locale.TAIWAN));
}
}
输出结果为:
User 乔彦辉 login at 10/6/10 1:14 PM
用户 乔彦辉 于 2010/10/6 下午 1:14 登录
监听事件:
在Spring应用程序执行期间,ApplicationContext本身就会发布一连串的事件,所有发布的事件都是抽象类org.springframework.context.ApplicationEvent的子类。例如:
ContextClosedEvent 在ApplicationContext关闭时发布的事件
ContextRefreshedEvent在初始化或refresh会发布的事件
RequestHandledEvent 在Web应用程序中,当请求被处理时,ApplicationContext会发布此事件。
如果你对这些事件感兴趣可以实现org.springframework.context.ApplicationListener接口。
ConsoleListener 仅在Debug时使用,会在文字模式下显示记录ApplicationContext的相关消息。
PerformanceMonitorListerner 在web应用程序中,搭配WebApplicationContext使用,可记录请求 的回应时间。
事件传播:
你可以使用ApplicationContext的publishEvent()方法来传播事件。
现在我们来实现一个简单的事件捕获的例子:
首先我们来定义一个事件:
package com.spring.ch042;
import org.springframework.context.ApplicationEvent;
public class MessageEvent extends ApplicationEvent{
private static final long serialVersionUID = 1L;
private String message;
public MessageEvent(Object source,String message) {
super(source);
this.message=message;
}
public String getMessage(){
return this.message;
}
}
接着我们一个监听器,用来监听事件,并注册
package com.spring.ch042;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
public class MessageEventListener implements ApplicationListener{
public void onApplicationEvent(ApplicationEvent event) {
if(event instanceof MessageEvent){
MessageEvent messageEvent=(MessageEvent)event;
System.out.println("Received "+messageEvent.getMessage()+" from "+
messageEvent.getSource());
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
">
<bean id="publisher" class="com.spring.ch042.EventPublisherDemo"/>
<!-- 注册监听器 -->
<bean class="com.spring.ch042.MessageEventListener"/>
</beans>
最后我们来测试一下:
package com.spring.ch042;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class EventPublisherDemo implements ApplicationContextAware{
private ApplicationContext ctx;
public void setApplicationContext(ApplicationContext ctx)
throws BeansException {
this.ctx=ctx;
}
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("/META-INF/eventdemo.xml");
EventPublisherDemo pub=(EventPublisherDemo)ctx.getBean("publisher");
pub.publish("Hello");
pub.publish("The quick brown fox jumped over the lazy dog");
}
public void publish(String message){
//发布事件
this.ctx.publishEvent(new MessageEvent(this,message));
}
}
输出结果为:
Received Hello from com.spring.ch042.EventPublisherDemo@a31e1b
Received The quick brown fox jumped over the lazy dog from com.spring.ch042.EventPublisherDemo@a31e1b
到这里ApplicationContext常用的功能就介绍完了。如果大家知道其他的功能,希望指点。
分享到:
相关推荐
"Spring ApplicationContext.xml配置的12个技巧演示教学" Spring ApplicationContext.xml配置是 Spring 框架中非常重要的一部分,它提供了企业级服务,并且可以通过依赖注入来获得简单而有效的测试能力。然而,在...
Spring中ApplicationContext加载机制 ApplicationContext 是 Spring 框架中的核心组件之一,负责加载和管理应用程序中的 Bean 对象。在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供...
在Spring框架中,ApplicationContext和BeanFactory是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入学习和使用Spring至关重要。 首先,BeanFactory是Spring中最基础的bean管理容器,它...
在Spring框架中,`applicationContext.xml`是核心配置文件,用于定义bean的声明、依赖注入、数据源配置、事务管理等。在这个配置文件中,我们可以深入理解Spring如何管理和协调应用程序的各个组件。以下是对`...
在Spring框架中,`applicationContext.xml`是核心的配置文件,它定义了应用上下文,即Spring容器,用来管理所有bean的创建、初始化、依赖注入以及生命周期。这个文件使用XML语法,遵循特定的命名空间和schema,以...
JSP Spring ApplicationContext的国际化支持是指在使用Spring框架开发应用时,如何让应用程序支持多语言环境,即能够根据用户的不同语言偏好显示相应的本地化信息。Spring框架通过ApplicationContext接口的国际化...
`applicationContext.xml`是Spring应用上下文配置文件,通常用于定义bean的声明、依赖注入以及数据源的相关配置。本文件模板将详细介绍如何在Spring中配置数据源,以便为你的应用程序提供稳定、高效的数据库连接。 ...
在Spring中,ApplicationContext(应用程序上下文)是容器的核心,负责配置和管理应用中对象的生命周期和依赖关系。在实际开发过程中,经常需要从各个角落获取到这个ApplicationContext对象,以便于能够使用Spring...
在 Play 2.4 中使用 Spring ApplicationContext 作为 Guice 模块。 我帮助做到这一点。
spring约束文件头文件ApplicationContext.xml的头文件
在Spring框架中,`ApplicationContext`不仅是一个容器,用于管理Bean的生命周期和依赖注入,它还提供了事件发布和监听的功能。这个特性使得Spring应用能够实现组件间的异步通信,类似于消息队列(MQ)的工作模式。...
在Spring框架中,`ApplicationContext` 是一个非常重要的接口,它提供了对整个应用上下文的访问,包括所有已初始化的Bean以及它们之间的依赖关系。通过`ApplicationContext`,我们可以获取到Spring容器管理的所有...
《Spring源码分析——ApplicationContext》 在Java世界中,Spring框架是不可或缺的一部分,它以其强大的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)特性,极大地...
在Spring框架中,`ApplicationContext`是一个非常重要的接口,它提供了加载和管理Bean定义,以及获取Bean实例的功能。本文将深入探讨如何在Spring中获取`ApplicationContext`的公用方法,并结合提供的两个文件名`...
1.spring-aop:面向切面AOP编程中需要使用。声明式事物也用到此包。...可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。
Spring applicationContext.xml常见部分属性的使用备注
在Spring框架中,ApplicationContext是核心接口,它扮演着应用程序上下文的角色,负责管理和提供bean实例。标题提到的"spring为ApplicationContext提供的3种实现",是指Spring框架中用于初始化和管理bean的三种主要...
这意味着 Spring 将在 WEB-INF/classes/spring 目录下寻找以“-config.xml”结尾的配置文件,并将其加载到 Spring ApplicationContext 中。 在 Spring 3.0.x 中,还引入了基于注解的依赖注入机制,使用 @Autowired ...
在Spring框架中,`applicationContext.xml`是应用上下文的核心配置文件,用于定义bean的创建、依赖关系以及各种服务的配置。这篇博文“Spring 2.5 - applicationContext.xml提示信息的配置”主要探讨了如何在Spring ...