spring入门--spring中applicationcontext的事件机制

标签: spring事件机制
7人阅读 评论(0) 收藏 举报
分类:

Spring的事件框架有如下两个重要的成员:

  • ApplicationEvent:容器事件,必须由ApplicationContext发布
  • ApplicationListener:监听器,可由容器中的任何监听器Bean担任

总的来说spring的事件机制主要包括四个步骤
1.编写ApplicationEvent类的子类,这就是我们的事件类
2.编写监听器类,这个类要实现ApplicationListener接口
3 将监听器配置在Spring的容器中
4.调用ApplicationContext的publishEvent()方法来主动触发一个容器事件,或者spring的一些内置事件发生
下面是applicationcontext事件机制的一个例子

1.ApplicationEvent类的子类

import org.springframework.context.ApplicationEvent;
public class SpringEvent extends ApplicationEvent {
    private String Address;
    private String text;
    public SpringEvent(Object source,String Address,String text) {
        super(source);
        // TODO Auto-generated constructor stub
        this.Address=Address;
        this.text=text;
    }
    public SpringEvent(Object source) {
        super(source);
        // TODO Auto-generated constructor stub
    }
    public String getAddress() {
        return Address;
    }
    public void setAddress(String address) {
        Address = address;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }


}

2.监听器类

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

public class EmailNotifier implements ApplicationListener {

    @Override
    public void onApplicationEvent(ApplicationEvent arg0) {
        // TODO Auto-generated method stub
        if(arg0 instanceof SpringEvent) {

            SpringEvent event=(SpringEvent) arg0;
            System.out.println("address"+event.getAddress());
            System.out.println("text"+event.getText());
        }
        else {
            System.out.println("容器本身事件"+arg0);
        }
    }

}

3.在配置文件中注册

<?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 class="EmailNotifier"></bean>
</beans>

4.发布事件


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Eveanttest {
    public static void main(String []args) {
        ApplicationContext Context=new ClassPathXmlApplicationContext("bean.xml");
        SpringEvent springEvent=new SpringEvent("hello","abc@163.com","this is text");
        Context.publishEvent(springEvent);
    }


}

5.执行结果
这里写图片描述

第一条输出为spring的内置事件发生,下面为大家介绍spring的几种内置事件

1.ContextRefreshedEvent:ApplicationContext容器初始化或刷新时触发该事件。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用

2.ContextStartedEvent:当使用ConfigurableApplicationContext(ApplicationContext的子接口)接口的start()方法启动ApplicationContext容器时触发该事件。容器管理声明周期的Bean实例将获得一个指定的启动信号,这在经常需要停止后重新启动的场合比较常见

3.ContextClosedEvent:当使用ConfigurableApplicationContext接口的close()方法关闭ApplicationContext时触发该事件

4.ContextStoppedEvent:当使用ConfigurableApplicationContext接口的stop()方法使ApplicationContext容器停止时触发该事件。此处的停止,意味着容器管理生命周期的Bean实例将获得一个指定的停止信号,被停止的Spring容器可再次调用start()方法重新启动

5.RequestHandledEvent:Web相关事件,只能应用于使用DispatcherServlet的Web应用。在使用Spring作为前端的MVC控制器时,当Spring处理用户请求结束后,系统会自动触发该事件。
我们刚触发的就是ContextRefreshedEvent事件

查看评论

spring cloud与spring boot实战

-
  • 1970年01月01日 08:00

Spring/Spring boot中使用自定义事件监听

在实际开发过程中,常常遇到这种场景: 做完某一件事情以后,需要广播一些消息或者通知,告诉其他的模块进行一些事件处理,一般来说,可以一个一个发送请求去通知,但是有一种更好的方式,那就是事件监听,事件监...
  • Harry_ZH_Wang
  • Harry_ZH_Wang
  • 2018-03-25 23:30:29
  • 54

spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)

在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据、加载一些数据到内存等等。 在Spring中可以通过ApplicationListener来实现相关的功能,加...
  • u013400939
  • u013400939
  • 2016-05-20 11:38:57
  • 4734

spring发布和接收定制的事件(spring事件传播)

有事件,即有事件监听器. 有人问你spring监听器有哪些你看了下文即也知道了。   事件传播 ApplicationContext基于Observer模式(java.util包中有对应实现),...
  • it_man
  • it_man
  • 2012-12-26 20:05:50
  • 38217

spring容器加载完毕干一件事情(利用ContextRefreshedEvent事件)

spring容器加载完毕干一件事情(利用ContextRefreshedEvent事件) www.MyException.Cn   发布于:2013-12-02 12:00:40   浏...
  • haqer0825
  • haqer0825
  • 2014-06-29 22:28:24
  • 4600

Spring中ApplicationContext对事件传递

ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口来提供的,通过ApplicationContext的publishE...
  • chenpeng19910926
  • chenpeng19910926
  • 2015-12-14 21:23:27
  • 2259

ApplicationContext事件机制

Spring中ApplicationContext中事件机制比较简单,容器事件:ApplicationEvent ,监听器:ApplicationListener,当事件发生时,触发监听器中方法。  ...
  • u013516966
  • u013516966
  • 2014-11-03 20:35:30
  • 931

Spring进阶之路(2)-ApplicationContext容器以及事件机制

Spring容器最基本的接口是BeanFactory,他负责配置、创建、管理bean,他的子接口之一:ApplicationContext,也叫做spring的上下文。ApplicationConte...
  • wangyang1354
  • wangyang1354
  • 2016-02-28 16:42:28
  • 4473

在servlet容器启动时获取ApplicationContext上下文环境

public class InitListener implements ServletContextListener{ @Override public void contextDestroy...
  • xiaozhuanhao
  • xiaozhuanhao
  • 2014-11-13 15:14:02
  • 3103

ApplicationContext特色功能详解

转载:http://youyu4.iteye.com/blog/2346183 ApplicationContext还在功能上做了扩展,相较于BeanFactorty,ApplicationCon...
  • hbtj_1216
  • hbtj_1216
  • 2017-06-02 15:39:56
  • 896
    个人资料
    等级:
    访问量: 4952
    积分: 263
    排名: 29万+
    文章分类
    最新评论