`
imaginecup
  • 浏览: 87381 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Spring ApplicationContext

阅读更多

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个技巧演示教学.pdf

    "Spring ApplicationContext.xml配置的12个技巧演示教学" Spring ApplicationContext.xml配置是 Spring 框架中非常重要的一部分,它提供了企业级服务,并且可以通过依赖注入来获得简单而有效的测试能力。然而,在...

    Spring中ApplicationContext加载机制

    Spring中ApplicationContext加载机制 ApplicationContext 是 Spring 框架中的核心组件之一,负责加载和管理应用程序中的 Bean 对象。在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供...

    Spring中ApplicationContext和beanfactory区别.rar

    在Spring框架中,ApplicationContext和BeanFactory是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入学习和使用Spring至关重要。 首先,BeanFactory是Spring中最基础的bean管理容器,它...

    spring applicationContext.xml详细配置

    在Spring框架中,`applicationContext.xml`是核心配置文件,用于定义bean的声明、依赖注入、数据源配置、事务管理等。在这个配置文件中,我们可以深入理解Spring如何管理和协调应用程序的各个组件。以下是对`...

    详解spring applicationContext.xml 配置文件

    在Spring框架中,`applicationContext.xml`是核心的配置文件,它定义了应用上下文,即Spring容器,用来管理所有bean的创建、初始化、依赖注入以及生命周期。这个文件使用XML语法,遵循特定的命名空间和schema,以...

    JSP Spring ApplicationContext的国际化支持

    JSP Spring ApplicationContext的国际化支持是指在使用Spring框架开发应用时,如何让应用程序支持多语言环境,即能够根据用户的不同语言偏好显示相应的本地化信息。Spring框架通过ApplicationContext接口的国际化...

    《Spring的数据源配置文件模板》applicationContext.zip

    `applicationContext.xml`是Spring应用上下文配置文件,通常用于定义bean的声明、依赖注入以及数据源的相关配置。本文件模板将详细介绍如何在Spring中配置数据源,以便为你的应用程序提供稳定、高效的数据库连接。 ...

    Spring获取ApplicationContext对象工具类的实现方法

    在Spring中,ApplicationContext(应用程序上下文)是容器的核心,负责配置和管理应用中对象的生命周期和依赖关系。在实际开发过程中,经常需要从各个角落获取到这个ApplicationContext对象,以便于能够使用Spring...

    play24-guice-spring:在 Play 2.4 中使用 Spring ApplicationContext 作为 Guice 模块

    在 Play 2.4 中使用 Spring ApplicationContext 作为 Guice 模块。 我帮助做到这一点。

    Spring最全约束文件

    spring约束文件头文件ApplicationContext.xml的头文件

    spring的Applicationcontext对事件的监听,实现类似MQ的效果

    在Spring框架中,`ApplicationContext`不仅是一个容器,用于管理Bean的生命周期和依赖注入,它还提供了事件发布和监听的功能。这个特性使得Spring应用能够实现组件间的异步通信,类似于消息队列(MQ)的工作模式。...

    spring中通过ApplicationContext getBean获取注入对象的方法实例

    在Spring框架中,`ApplicationContext` 是一个非常重要的接口,它提供了对整个应用上下文的访问,包括所有已初始化的Bean以及它们之间的依赖关系。通过`ApplicationContext`,我们可以获取到Spring容器管理的所有...

    三、Spring源码分析——ApplicationContext

    《Spring源码分析——ApplicationContext》 在Java世界中,Spring框架是不可或缺的一部分,它以其强大的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)特性,极大地...

    spring 获得applicationcontext公用方法

    在Spring框架中,`ApplicationContext`是一个非常重要的接口,它提供了加载和管理Bean定义,以及获取Bean实例的功能。本文将深入探讨如何在Spring中获取`ApplicationContext`的公用方法,并结合提供的两个文件名`...

    spring jar包

    1.spring-aop:面向切面AOP编程中需要使用。声明式事物也用到此包。...可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。

    applicationContext.xml

    Spring applicationContext.xml常见部分属性的使用备注

    spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext

    在Spring框架中,ApplicationContext是核心接口,它扮演着应用程序上下文的角色,负责管理和提供bean实例。标题提到的"spring为ApplicationContext提供的3种实现",是指Spring框架中用于初始化和管理bean的三种主要...

    基于注解的Spring_3.0.x_MVC

    这意味着 Spring 将在 WEB-INF/classes/spring 目录下寻找以“-config.xml”结尾的配置文件,并将其加载到 Spring ApplicationContext 中。 在 Spring 3.0.x 中,还引入了基于注解的依赖注入机制,使用 @Autowired ...

    Spring 2.5-applicationContext.xml提示信息的配置

    在Spring框架中,`applicationContext.xml`是应用上下文的核心配置文件,用于定义bean的创建、依赖关系以及各种服务的配置。这篇博文“Spring 2.5 - applicationContext.xml提示信息的配置”主要探讨了如何在Spring ...

Global site tag (gtag.js) - Google Analytics