`
sun201200204
  • 浏览: 294873 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring中ApplicationContext对事件的支持

    博客分类:
  • java
阅读更多

http://hi.baidu.com/holder/blog/item/8ebed20001245719728b6594.html

 

ApplicationContext具有发布事件的能力。这是因为该接口继承了ApplicationEventPublisher接口。Spring中与事件有关的接口和类主要包括ApplicationEvent、ApplicationListener。
定义一个事件的类需要继承ApplicationEvent或者ApplicationContextEvent抽象类,该抽象类中只有一个构造函数,并 且带有一个Object类型的参数作为事件源,并且该事件源不能为null,因此我们需要在自己的构造函数中执行super(Object)。

public class UserEvent extends ApplicationEvent
{
   private String eventContent;
   public String getEventContent(){
      return eventContent;
   }
   public void setEventContent(String eventContent){
      this.eventContent = eventContent;
   }
   public UserEvent(Object source,String eventContent){
      super(source);
      this.eventContent = eventContent;
   }
}
 
针对一种事件,可能需要特定的监听器,因此,监听器需要实现ApplicationListener接口。当监听器接收到一个事件的时候,就会执行它的 onApplicationEvent()方法。由于Spring IoC中的事件模型是一种简单的、粗粒度的监听模型,当有一个事件到达时,所有的监听器都会接收到,并且作出响应,如果希望只针对某些类型进行监听,需要 在代码中进行控制。
public class UserListener implements ApplicationListener
{
   public void onApplicationEvent(ApplicationEvent event){
      if(event instanceof UserEvent){ //只对UserEvent类型进行处理
         UserEvent ue = (UserEvent)event;
         String result = ue.getEventContent();
         System.out.println("Event Content:"+result);
      }
   }
}
 
对于发布事件,我们可以实现ApplicationContextAware或者ApplicationEventPublisherAware接口。
public class UserBiz implements ApplicationContextAware
{
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
    this.applicationContext = applicationContext; 
}
public void service(String thing)
{
    UserEvent event = new UserEvent(this,thing);
    event.setEventContent("I shoud "+thing);
    applicationContext.publishEvent(event);
}   
}
 
或者如下:
public class UserBiz2 implements ApplicationEventPublisherAware
{
    private ApplicationEventPublisher applicationEventPublisher;
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
    {
        this.applicationEventPublisher = applicationEventPublisher;
    }
    public void service(String thing)
    {
        UserEvent event = new UserEvent(this,thing);
        event.setEventContent("I shoud "+thing);
        applicationEventPublisher.publishEvent(event);
    }
}
 
至此便完成了事件的发布,当ApplicationContext接收到事件后,事件的广播是Spring内部给我们做的,不需要了解具体的细节。其实在 Spring读取配置文件之后,利用反射,将所有实现ApplicationListener的Bean找出来,注册为容器的事件监听器。当接收到事件的 时候,Spring会逐个调用事件监听器。剩下要做的就是在配置文件中配置监听器。
<bean class="footprint.spring.ioc.event.UserListener"/>
Spring容器自身会发布一些事件,包括ContextClosedEvent、ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent。

分享到:
评论

相关推荐

    JSP Spring ApplicationContext的国际化支持

    主要介绍了JSP Spring ApplicationContext的国际化支持的相关资料,需要的朋友可以参考下

    Spring中文帮助文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    spring jar 包详解

    (8) spring-orm.jar 这个jar文件包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖 spring-dao.jar...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 ...

    Spring教程  主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。

    作者:钱安川(Moxie) 注:后面的内容我将不再完善,但网上的朋友可以帮助完善,只需注明住处即可。 Spring教程 1 Spring框架概述 3 Spring是什么? 3 Spring的历史 4 ...Spring对其它企业应用支持 22

    Spring的IoC容器(《Spring揭秘》的精选版)

    迷你书是《Spring揭秘》的精选版,节选了原书中介绍Spring IoC容器的6个章节。《Spring揭秘》以幽默生动的语言、辅以有趣的故事和典故,循循善诱地阐述了Spring框架的方方面面。针对Spring框架的主要功能以及开发者...

    spring培训-笔记

    目录: Spring教程 1 名词解释 2 Spring框架概述 3 Spring是什么?...Spring的历史 4 ...Spring对其它企业应用支持 22 注:后面的内容我将不再完善,但网上的朋友可以帮助完善,只需注明住处即可。

    spring4.3.9相关jar包

    spring-aspects.jar :提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。 spring-context-support.jar:Spring context的扩展支持,用于MVC方面。 spring-expression.jar:...

    spring4.1核心包

    可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 外部依赖spring-beans, (spring-aop)。 5. spring-context-support-4.1.1....

    spring jar包

    2.spring-aspects:提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。 3.spring-beans:基础jar包,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / ...

    Spring开发指南

    ApplicationContext Web Context Spring 高级特性 Web 应用与 MVC Spring MVC Spring MVC指南 基于模板的Web表示层技术 Web 应用中模板技术与 JSP 技术的对比 输入验证与数据绑定 异常处理 国际化支持 ...

    spring-web-5.3.6 jar包.rar

    这个jar文件包含Web应用开发时...包括一些动载入Web ApplicationContext 特性的类、Lister类、文件上传的支持类、便捷的工具辅助类、Spring HTTP调用、用于集成其他web框架的基础结构以及技术,例如(@RequestMapping)

    spring面试题大全

    spring面试题大全,希望可以帮助到大家。...* Spring对很多ORM框架提供了很好支持,描述下在spring使用hibernate的方法 请介绍下spring的事务管理 如何在spring的applicationContext.xml使用JNDI而不是DataSource

    最新最全的spring开发包

    这个jar文件包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖 spring-dao.jar里的类,用这个包时你...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

     这个jar文件包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖 spring-dao.jar里的类,用这个包时...

    struts2+spring+hibernate整合示例

    a 加入支持:添加 spring核心包、hibernate 3.6 包、 spring整合hibernate包 , 在src下建立applicationContext.xml (先建立src下便于测试hibernate)。 b 编写实体类,加入hibernate注解,编写方法类测试类,在...

    Spring面试题含答案.pdf

    44. Spring 对 DAO 的支持 45. 使用 Spring 通过什么方式访问 Hibernate? 46. Spring 支持的 ORM 47.如何通过 HibernateDaoSupport 将 Spring 和 Hibernate 结合起来? 48. Spring 支持的事务管理类型 49. Spring ...

    Spring 2.0 开发参考手册

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form...

    Spring API

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

Global site tag (gtag.js) - Google Analytics