`
rock
  • 浏览: 58141 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring事件处理框架

阅读更多

 

1 Spring 事件处理框架

 

通过 ApplicationEvent 类和ApplicationListener 接口,Event 事件处理会在ApplicationContext 中进行。如果一个bean 实现了ApplicationListener 接口,当ApplicationEventApplicationContext 发布时,这个bean 就会被通知。这在本质上相当于标准的观察者模式。

 

ApplicationContext 通过方法publishEvent() 来发布事件,该方法的参数是继承了ApplicationEvent 的事件定义类的实例。所有的监听者都会同步的接收到发布的事件,这意味着当publishEvent ()调用时程序会阻塞,直到所有的监听者都处理完毕(也可能通过实现ApplicationEventMulticaster 来提供一个交替的事件发布策略,Spring SimpleApplicationEventMulticaster 是他的一个实现,内部使用 TaskExecutor 以多线程的方式异步调用事件监听 )。如果有事物上下文,监听者的事务会处在发布者的事物当中。

 

 

以下是一个实例:

事件定义类

public abstract class BlackListEvent extends ApplicationEvent {

        public BlackListEvent(Object source) {

           super (source);

        }       

public final Black get Black () {

           return ( Black )getSource();

        }

 

}

事件发布类:

public class EmailBean implements ApplicationContextAware {

private List blackList;

private ApplicationContext ctx;

public void setBlackList(List blackList) {

this.blackList = blackList;

}

public void setApplicationContext(ApplicationContext ctx) {

this.ctx = ctx;

}

public void sendEmail(String address, String text) {

if (blackList.contains(address)) {

Black black=new Black(address, text);

                      BlackListEvent event = new BlackListEvent(black);

                      ctx.publishEvent(event);

     }

// send email...

}

}

事件监听类:

public class BlackListNotifier implements ApplicationListener {

private String notificationAddress;

public void setNotificationAddress(String notificationAddress) {

this.notificationAddress = notificationAddress;

}

public void onApplicationEvent(ApplicationEvent event) {

if (event instanceof BlackListEvent) {

// notify appropriate person...

}

}

}

 

bean 配置文件:

<bean id="emailer" class="example.EmailBean">

<property name="blackList">

<list>

<value>black@list.org</value>

<value>white@list.org</value>

<value>john@doe.org</value>

</list>

</property>

</bean>

<bean id="blackListListener" class="example.BlackListNotifier">

<property name="notificationAddress" value="spam@list.org"/>

</bean>

 

2 后续问题

   Aop 替代:与 aop 实现方式的比较。(减小耦合)

  同步事件:可以处理 before after 等事件。( spring 为同步)

   异步事件:事件异步处理框架 , 考虑事务问题。

   事件监听管理:集中管理还是分散管理(不同的设计方式)

                 集中管理优点:方便查找事件监听,利于维护

                 分散管理: 更高程度上解耦

分享到:
评论

相关推荐

    Spring Batch批处理框架

    Spring Batch是一个开源的轻量级批处理框架,它提供了一整套可复用的组件,用于构建健壮且高效的批处理应用程序。由于信息给定的【部分内容】并没有提供实际的技术细节,因此我将基于Spring Batch框架本身,详细介绍...

    spring 事件处理

    在Spring框架中,事件处理是一种重要的通信机制,它允许组件之间进行解耦的通信。Spring事件处理基于发布/订阅模式,其中事件是消息的载体,而事件监听器则是对这些消息感兴趣的订阅者。在这个场景中,我们将探讨...

    SpringCloud基本框架+完整示例工程.rar

    SpringCloud是中国Java开发者广泛使用的微服务框架之一,它基于Netflix OSS构建,提供了众多服务治理功能,如服务发现、负载均衡、断路器、配置中心、API Gateway等,旨在简化分布式系统开发。本压缩包文件“Spring...

    Spring框架 jar包

    - `spring-context`:扩展了`spring-beans`,提供了上下文支持,如事件发布、国际化和资源访问等功能。 - `spring-aop`:实现了AOP框架,支持切点表达式、通知类型和代理模式。 - `spring-web`:提供了Web相关的支持...

    Spring框架开发参考中文手册

    《Spring框架开发参考中文手册》是一本专门为Java开发者设计的指南,旨在帮助他们深入理解和熟练运用Spring框架进行软件开发。Spring作为Java企业级应用开发的主流框架,以其强大的功能、灵活的设计和广泛的社区支持...

    基于Spring的web框架使用说明

    **基于Spring的Web框架使用说明** Spring框架是Java开发中广泛应用的一个开源框架,以其轻量级、模块化和强大的依赖注入特性而闻名。本指南将深入探讨如何在Web开发中利用Spring框架,以及如何通过其核心特性提升...

    Spring+Android框架

    6. **EventBus和Publish/Subscribe模式**:Spring的事件驱动模型可以和Android的EventBus库结合,实现组件之间的松耦合通信,让代码结构更加清晰。 7. **Spring Cloud for Android**:虽然不直接包含在Spring for ...

    springmvc+spring+mybatis开发框架搭建代码,已使用,完美运行。

    在SSM框架中,Spring MVC负责处理HTTP请求,将请求转发给Spring管理的Service层,Service层利用Spring的DI特性,注入需要的数据访问对象(DAO)。DAO层通常由MyBatis实现,执行SQL语句并与数据库交互。Service层处理...

    spring等框架学习电子书

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)能力而著名。SSH框架则是Spring、Struts和Hibernate三个...

    SpringCloud-Demo框架

    6. **Spring Cloud Bus**:事件、消息总线。它可以用来广播配置更改,也可以在服务间传递消息,实现分布式系统间的通信。 7. **Spring Cloud Gateway**:Spring Cloud的新一代API网关,替代了原有的Zuul,提供更...

    android的spring框架

    Spring框架支持事件驱动编程模型,通过`ApplicationEvent`和`ApplicationListener`接口,可以让不同组件之间通过发布和订阅事件进行通信,而不必直接耦合。 7. **数据访问** 尽管Android通常使用SQLite数据库,但...

    myBatis+spring+cxf 框架简单整合(包jar)

    1. 配置Spring:创建Spring配置文件,定义Bean,如DataSource、SqlSessionFactory、Mapper接口的实现类等,并使用Spring的AOP来处理事务。 2. 集成MyBatis:配置MyBatis的主配置文件,包括数据源、事务管理器、...

    Spring框架基础总结

    2. **Spring上下文**:为Spring框架提供上下文信息,是基于核心容器的抽象,提供了更强大的功能,如国际化支持、事件传播、资源加载和验证机制等。 3. **Spring AOP**:将面向切面的编程功能集成到Spring框架中,为...

    Spring框架jar 文件

    Spring框架是中国Java开发领域中的一个核心支柱,它以其强大的功能和灵活性深受开发者喜爱。这个压缩包包含的是Spring框架的核心JAR文件,对于任何Java开发者,尤其是那些致力于企业级应用开发的人来说,这些都是必...

    struts2 spring hibernate框架技术与项目实战 光盘源码上

    Struts2、Spring和Hibernate是Java Web开发中的三大主流框架,它们各自负责应用程序的不同层面,协同工作可以构建出高效、可维护的复杂Web应用。在本资源中,"struts2 spring hibernate框架技术与项目实战 光盘源码 ...

    Spring框架相关jar包

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心组件包括了多个jar包,如Spring-expression、Spring-beans、Spring-context以及Spring-core等。这些jar包分别承载着Spring框架的关键功能,使得开发者能够...

Global site tag (gtag.js) - Google Analytics