Spring---ApplicationContext的事件机制

事件源:ApplicationContext。publishEvent()方法:用于主动触发容器事件。

事件:ApplicationEvent类,容器事件,必须由ApplicationContext发布。

事件监听器:ApplicationListener接口,可由容器中任何监听器Bean担任。onApplicationEvent(ApplicationEvent event):每当容器内发生任何事件时,此方法都被触发

容器事件类需继承ApplicationEvent类,容器事件的监听器类需实现ApplicationListener接口。

下面给出一个例子

1.首先定义一个EmailEvent类,继承ApplicationEvent类

public class EmailEvent extends ApplicationEvent {
    private String address;
    private String text;

    public EmailEvent(Object source) {
        super(source);
    }

    public EmailEvent(Object source, String address, String text) {
        super(source);
        this.address = address;
        this.text = text;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

2,定义一个EmailNotifier类,实现ApplicationListener接口,并复写onApplicationEvent()方法

public class EmailNotifier implements ApplicationListener {
    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        if (applicationEvent instanceof EmailEvent){
            EmailEvent emailEvent = (EmailEvent) applicationEvent;
            System.out.println("需要发送邮件的接收地址: " + emailEvent.getAddress());
            System.out.println("需要发送邮件的邮件正文: " + emailEvent.getText());
        }else {
            System.out.println("容器本身的事件: " + applicationEvent);
        }
    }
}

3.将监听器配置在容器中

<bean class="org.spring.listener.EmailNotifier"/>

4.编写主程序main

public class SpringTest {
    public static void main(String[] args){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
//        EmailEvent ele = new EmailEvent("hello","[email protected]","this is a test");
//        ctx.publishEvent(ele);
    }
}

程序到此结束,运行结果如下:

容器本身的事件: org.springframework.context.event.ContextRefreshedEvent[source=org[email protected]b81eda8: startup date [Thu Dec 04 20:20:52 CST 2014]; root of context hierarchy]

若取消main中的注释,即,使用publishEvent()来触发事件,运行结果如下:

容器本身的事件: org.springframework.context.event.ContextRefreshedEvent[source=org[email protected]b81eda8: startup date [Thu Dec 04 20:24:03 CST 2014]; root of context hierarchy]
需要发送邮件的接收地址: [email protected]
需要发送邮件的邮件正文: this is a test
时间: 2024-10-29 19:05:44

Spring---ApplicationContext的事件机制的相关文章

【好文推荐】Spring中ApplicationContext的事件机制

ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext 事件处理.如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被 触发. Spring的事件框架有如下两个重要的成员: ApplicationEvent:

Spring 中的事件机制

说到事件机制,可能脑海中最先浮现的就是日常使用的各种 listener,listener去监听事件源,如果被监听的事件有变化就会通知listener,从而针对变化做相应的动作.这些listener是怎么实现的呢?说listener之前,我们先从设计模式开始讲起. 观察者模式 观察者模式一般包含以下几个对象: Subject:被观察的对象.它提供一系列方法来增加和删除观察者对象,同时它定义了通知方法notify().目标类可以是接口,也可以是抽象类或具体类. ConcreteSubject:具体的

Spring中的ApplicationContext事件机制

ApplicationContext的事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListerner接口来实现. 1. 创建EmailEvent public class EmailEvent extends ApplicationEvent{ private String address; private String text; public EmailEvent(Object source) { super(source); } publi

观察者模式之spring事件机制

ddsspring中的事件机制使用到设计模式中的观察者模式 ,观察者模式有两个概念,1.观察者.被观察者.2.被观察者做出相应得动作,观察者能接收到.不分析设计模式,学习下spring中的事件机制实际开发如何使用 及使用场景 . spring中的事件机制涉及到者几个类文件 :ApplicationEvent(事件类型).ApplicationListener(事件监听类).ApplicationEventPublisher(事件发布类).先看看这几个类的继承.实现关系: Application类

Spring的事件机制详解

同步事件和异步事件 同步事件:在一个线程里,按顺序执行业务,做完一件事再去做下一件事. 异步事件:在一个线程里,做一个事的同事,可以另起一个新的线程执行另一件事,这样两件事可以同时执行. 用一个例子来解释同步事件和异步事件的使用场景,有时候一段完整的代码逻辑,可能分为几部分,拿最常见的注册来说,假设完整流程是,1.点击注册->2.检验信息并存库->3.发送邮件通知->4.返回给用户.代码这么写是正确,但不是最好的,缺点如下: 1.逻辑复杂,业务耦合,我们把校验数据并存库写到一个大的业务方

spring的事件机制

事件机制作为一种编程机制,在许多语言中都提供了支持.JAVA语言也不例外,java中的事件机制的参与者有3种角色: 1.event object 2.event source 3.event listener 这三个角色的含义字面上很好解,它们就定义了事件机制的一个基本模型.作为一种常用的编程设计机制,许多开源框架的设计中都使用了事件机制.SpringFramework也不例外,下面着重阐述个人对spring中的事件机制的一些理解.其中一个主要的使用场景是用在IOC的容器的启动过程,当所有的be

搞清楚Spring事件机制后:Spring的源码看起来简单多了

本文主讲Spring的事件机制,意图说清楚: 什么是观察者模式? 自己实现事件驱动编程,对标Spring的事件机制 彻底搞懂Spring中的事件机制,从而让大家 本文内容较长,代码干货较多,建议收藏后持续阅读. Spring框架已然是Javaeee开发领域的霸主,无论是使用SpringBoot还是SpringCloud,都离不开Spring框架. 作为Java开发者,无论是面试求职还是日常开发,就必须得熟练掌握.运用Spring框架. 因此学习Spring框架源码也就成为了大家最重要的事情之一.

Spring 事件机制

通过模拟邮件的发送,说明Spring的事件监听机制 事件类 1 package org.zln.module_chapter2.event; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.event.ApplicationContextEvent; 5 6 /** 7 * 发送邮件事件类 8 * Created by sherry on 000005/

Spring中ApplicationContext对事件的支持

Spring中ApplicationContext对事件的支持 ApplicationContext具有发布事件的能力.这是因为该接口继承了ApplicationEventPublisher接口.Spring中与事件有关的接口和类主要包括ApplicationEvent.ApplicationListener.定义一个事件的类需要继承ApplicationEvent或者ApplicationContextEvent抽象类,该抽象类中只有一个构造函数,并 且带有一个Object类型的参数作为事件源

spring的事件机制实战

理论 在分布式场景下,实现同步转异步的方式有三种方式:br/>1.异步线程池执行:比如借助@Asyn注解,放到spring自带的线程池中去执行:2.放到消息队列中,在消费者的代码中异步的消费,执行相关的逻辑:3.基于spring的事件机制,触发事件,在监听器里实现相关逻辑: spring中自带了事件的支持,核心类是ApplicationEventPublisher; 事件包括三个要点:下面是一个demo的实现,理论结合实战. 1 事件的定义: package com.springbootprac