`
angie_hawk7
  • 浏览: 48228 次
  • 性别: Icon_minigender_1
  • 来自: 乌托邦
社区版块
存档分类
最新评论

Spring的事件传播

阅读更多
ApplicationEvent
public abstract class ApplicationEvent extends EventObject

ApplicationEventPublisher
public interface ApplicationEventPublisher

 void publishEvent(ApplicationEvent event) 
 
引用
Notify all listeners registered with this application of an application event.

引用
Interface that encapsulates event publication functionality. Serves as super-interface for ApplicationContext.

ApplicationListener
public interface ApplicationListener extends EventListener

void onApplicationEvent(ApplicationEvent event) 
          
引用
Handle an application event.

引用
Interface to be implemented by application event listeners. Based on the standard java.util.EventListener interface for the Observer design pattern


下面是一个结合comet的例子:
public class DwrService implements ApplicationContextAware {
	private ApplicationContext ctx;

	public void setApplicationContext(ApplicationContext ctx) {
		this.ctx = ctx;
	}

	public void perform() {
		int i=0;
		while(i<1000){
			i++;
			PerformInfo info = new PerformInfo();
			info.setId(i);
			info.setMsg("发送" + i + "信息");
			info.setTime(new Date());
			InfoEvent evt = new InfoEvent(info);
			ctx.publishEvent(evt);
		}
	}

}

必须实现ApplicationContextAware接口,这里最关键就是applicationContext的publishEvent方法,它起到发布事件,通知Listener的目的。

public class InfoEvent extends ApplicationEvent {
	public InfoEvent(Object source) {
		super(source);
	}
}


public class NotifyClient implements ApplicationListener, ServletContextAware {
	private ServletContext servletContext = null;

	public void setServletContext(ServletContext servletContext) {
		this.servletContext = servletContext;
	}

	public void onApplicationEvent(ApplicationEvent event) {
		if (event instanceof InfoEvent) {
			PerformInfo info = (PerformInfo) event.getSource();
			System.out.println(info.getMsg());
			// Collection<ScriptSession> sessions=ctx.getAllScriptSessions();
			ServerContext ctx = ServerContextFactory.get(servletContext);
			Collection<ScriptSession> sessions = ctx.getScriptSessionsByPage("/comet/dwrShow/comet.jsp");
			for (ScriptSession session : sessions) {
				ScriptBuffer script = new ScriptBuffer();
				String s = null;
				String s2 = null;
				try {
					s = java.net.URLEncoder.encode(info.getMsg(), "UTF-8");
					s2 = java.net.URLEncoder.encode("通知结束", "UTF-8");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				if (info.getId() < 1000) {
					script.appendScript("putInfo('").appendScript(
							info.getId() + ":" + s).appendScript("'); ");
				} else {
					script.appendScript("alert(decodeURI('").appendScript(s2)
							.appendScript("')); ");
				}

				System.out.println(script.toString());
				session.addScript(script);
			}
		}
	}
}



事件监听类实现了ApplicationListener接口,必须实现onApplicationEvent方法,在这个方法中,我们可以根据业务要求,根据
applicationContext.publishEvent(event)中发布的不同事件,进行相应的处理。

引用
ApplicationContext会自动在当前所有的Bean中寻找ApplicationListener接口的实现,并将其作为事件接收的对象。当

applicationContext.publishEvent(event)方法调用时,所有的ApplicationListener接口实现都会被激发,在每个ApplicationListener可以根据事件的类型判断是自己需要处理的事件。



分享到:
评论

相关推荐

    spring事件传播

    spring发布和接收定制事件(这个上传必须要填资源分啦),ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传 播功能。通过Application. publishEvent方法,我们可以将事件...

    spring 事务传播 demo

    本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@...

    Spring中事务的传播属性详解

    ### Spring中事务的传播属性详解 #### 一、引言 在使用Spring框架进行应用程序开发时,事务管理是一项非常重要的特性。Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理因其...

    Spring事务传播机制.docx

    Spring 事务传播机制 Spring 事务传播机制是指在 Spring 框架中,事务的传播和嵌套机制。当我们在使用 Spring 所提供的事务功能时,如果是仅仅处理单个的事务,是比较容易把握事务的提交与回滚,不过一旦引入嵌套...

    spring事件的例子

    Spring事件处理还支持事件分发策略,如多线程处理事件,可以通过配置`SimpleApplicationEventMulticaster`或自定义实现`ApplicationEventMulticaster`接口来调整事件的传播方式。 此外,Spring还提供了`...

    Spring事务传播特性解析

    通过代码解析spring传播特性,包括 1、Propagation.REQUIRED 方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。 2、Propagation.REQUIRES_NEW 无论何时自身都会开启事务 3、...

    spring 事务传播

    ### Spring 事务传播属性详解 #### 一、Spring 事务基础概述 在深入探讨Spring框架中的事务传播属性之前,我们先来简要回顾一下Spring事务的基础概念。Spring框架提供了强大的事务管理功能,允许开发者通过声明式...

    spring事物传播测试表

    事务传播行为(Transaction Propagation)是Spring事务管理中一个关键的概念,用于定义在一个事务方法被调用时,如何与当前运行的事务进行交互。本文将深入探讨“Spring事物传播测试表”所涉及的知识点。 首先,...

    Spring框架的设计理念与设计模式分析之一

    5. **观察者模式**:Spring事件传播机制使用了观察者模式,使得组件之间能够相互通信而不必彼此了解对方的内部结构。 #### 六、对软件设计的启示 Spring框架的设计理念及其所采用的设计模式为软件开发人员提供了...

    Spring事件管理

    在Spring框架中,事件管理是一种强大的机制,它允许在应用程序组件之间传递消息,而无需这些组件之间有直接的依赖关系。这种松耦合的方式提高了代码的可维护性和可测试性。接下来,我们将深入探讨Spring事件管理的...

    JAVA-spring学习资源之spring事件

    此外,Spring还支持`ApplicationEventMulticaster`接口,你可以自定义事件多播器来控制事件的传播策略,比如异步处理事件。 通过`demo_adv_event_01_event_base`这个压缩包中的示例,你可以更深入地了解如何在实际...

    Spring事务传播Demo.zip

    本篇将基于"Spring事务传播Demo"来深入探讨Spring事务管理和传播行为。 首先,我们需要理解什么是事务。在数据库操作中,事务是一组操作,这些操作要么全部执行,要么全部不执行,以确保数据的一致性和完整性。在...

    Spring的配置以及事件注入

    当你有一个事件需要在整个应用中传播时,可以创建一个自定义的事件类,继承自ApplicationEvent。例如: ```java public class CustomEvent extends ApplicationEvent { private String eventData; public ...

    spring事务的传播特性和事务隔离级别

    ### Spring事务的传播特性和事务隔离级别 #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,...

    spring 事务传播与隔离级别DEMO

    本DEMO主要探讨的是Spring事务的传播行为和隔离级别,这些概念对于理解和优化数据库操作至关重要。让我们深入理解这些概念及其实际应用。 首先,我们来谈谈事务的传播行为。在Spring中,当一个方法被另一个具有事务...

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

    当你有一个需要传播的消息或事件时,你可以创建一个继承自`ApplicationEvent`的自定义事件类。 创建自定义事件类的示例如下: ```java public class MyCustomEvent extends ApplicationEvent { private String ...

    event.rar-Spring事件监听机制

    在Spring框架中,事件监听机制是一种非常重要的组件间通信方式,它允许应用程序的不同部分通过发布和订阅事件来进行异步通信。这种模式使得组件之间松耦合,提高了代码的可维护性和可扩展性。下面我们将详细探讨...

    Spring事务传播属性

    Spring事务传播属性是这一机制的关键组成部分,它定义了在一个事务方法被另一个事务方法调用时,应该如何处理事务的边界。在深入理解Spring事务传播属性之前,我们首先需要了解Spring中的事务管理模型,包括编程式...

    Spring在Transaction事务传播行为种类

    ### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...

    SPRING事务传播特性&事务隔离级别

    ### Spring 事务传播特性和事务隔离级别详解 #### 一、Spring 事务传播特性 在进行多层服务架构设计时,事务的管理尤其重要。为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细...

Global site tag (gtag.js) - Google Analytics