`
sun201200204
  • 浏览: 299903 次
  • 性别: 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。

分享到:
评论

相关推荐

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

    Spring框架作为Java EE开发中非常流行和强大的框架之一,为Java应用提供了全面的基础设施支持。在Spring中,ApplicationContext(应用程序上下文)是容器的核心,负责配置和管理应用中对象的生命周期和依赖关系。在...

    Spring中ApplicationContext和beanfactory区别.rar

    然而,BeanFactory缺乏一些高级功能,如国际化支持(i18n)、事件传播、AOP代理以及对Spring的其他核心模块如MessageSource、ApplicationEvent等的集成。因此,对于大型复杂的应用,BeanFactory可能显得不够用。 ...

    三、Spring源码分析——ApplicationContext

    ApplicationContext支持发布和订阅事件。当某个事件发生时,ApplicationContext会调用所有已注册的ApplicationListener对象的onApplicationEvent方法,使得组件之间可以通过事件进行通信,而无需直接引用彼此。 5....

    spring 获得applicationcontext公用方法

    `ApplicationContext`是Spring框架的核心组件,它是Bean工厂(`BeanFactory`)的扩展,提供了更多高级特性,如国际化支持、事件发布、AOP代理等。通常,我们可以通过XML配置文件、注解或Java配置类来创建`...

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

    在Java世界中,Spring框架是应用开发的核心框架之一,它为构建高质量的、松散耦合的Java应用程序提供了强大的支持。在Spring框架中,ApplicationContext是核心接口,它扮演着应用程序上下文的角色,负责管理和提供...

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

    Spring 2.5是一个重要的里程碑,引入了许多新特性,如基于注解的配置、AOP改进、对JSR-250的支持等。在这个版本中,配置方式更加灵活,既支持XML配置,也支持注解配置,使得开发过程更加简便。 2. **XML配置文件的...

    spring3.0 + Quartz1.52 + applicationContext.xml

    2. **配置Scheduler**:在`applicationContext.xml`中,我们需要创建一个`SchedulerFactoryBean`,这是Spring对Quartz Scheduler的封装,它负责初始化和管理Scheduler实例。例如: ```xml ...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    2. **事件的传递**:ApplicationContext支持事件发布和监听。任何Bean可以通过调用`publishEvent()`方法发布自定义事件。其他Bean可以通过实现`ApplicationListener`接口来监听这些事件。这是一种有效的组件间通信...

    spring2.5的applicationContext配置文件

    在Spring框架中,`applicationContext.xml`是核心的配置文件,它定义了bean的实例化、依赖注入、服务的装配以及整个应用上下文的行为。在Spring 2.5版本中,这个配置文件引入了许多增强的功能,提升了开发效率和灵活...

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

    以上就是Spring中配置数据源的基本步骤,通过`applicationContext.xml`文件,你可以根据项目需求灵活调整数据源配置,确保数据库连接的高效和稳定。在实际开发中,你可能还需要考虑更多因素,比如数据库连接池的优化...

    day38 05-Spring的BeanFactory与ApplicationContext区别

    ApplicationContext的主要特点是它提供了一个更加丰富的环境,包括对消息资源的访问、支持AOP代理、支持事件监听和发布、以及集成其他框架如JMS、Quartz等的能力。此外,ApplicationContext还能够从多种类型的配置源...

    Spring中文API帮助文档

    2. **Bean工厂(Bean Factory)与ApplicationContext**:Bean Factory是Spring容器的基本实现,而ApplicationContext在Bean Factory的基础上添加了更多企业级服务,如消息源、应用事件和国际化支持。 3. **AOP**:...

    详解spring applicationContext.xml 配置文件

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

    JSP Spring ApplicationContext的国际化支持

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

    09 Spring IoC容器ApplicationContext如何实现国际化慕课专栏1

    在Spring框架中,ApplicationContext是IoC容器的核心,它不仅负责管理Bean,还提供了实现国际化(i18n)的功能。国际化使应用程序能够适应不同语言和地区的用户,无需修改代码即可提供多语言支持。Spring通过实现...

    spring源码中英文注释

    2. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring的AOP模块支持在不修改源代码的情况下,对代码进行功能增强。这通常用于日志记录、事务管理等。在源码中,你会遇到`Advisor`、`Pointcut`和`Aspect...

    spring 源码中文注释

    在源码中,`BeanFactory`和`ApplicationContext`接口是IoC容器的主要代表,前者是基础版本,后者提供了更多的企业级特性,如事件发布、国际化支持等。 接着,AOP是Spring的另一大特色。AOP允许开发者定义“切面”,...

    SpringCloud中文文档

    Spring Cloud Context 提供了 ApplicationContext 的实用程序和特殊服务,而 Spring Cloud Commons 则是一组在不同的 Spring Cloud 实现中使用的抽象和常用类。 在使用 Spring Cloud 时,需要注意到由于“非法密钥...

    spring事件的例子

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

Global site tag (gtag.js) - Google Analytics