spring 事件(Application Event)

spring 事件为bean 与 bean之间传递消息。一个bean处理完了希望其余一个接着处理.这时我们就需要其余的一个bean监听当前bean所发送的事件.

spring事件使用步骤如下:

1.先自定义事件:你的事件需要继承 ApplicationEvent

2.定义事件监听器: 需要实现 ApplicationListener

3.使用容器对事件进行发布

以下例子是场景是注册的时候发送邮件的一个场景:

先定义事件:

package com.foreveross.service.weixin.test.springevent;

import org.springframework.context.ApplicationEvent;

/**
 * 自定义一个事件
 * @author mingge
 *
 */
public class DemoEvent extends ApplicationEvent{

    private String msg;

    private String email;

    public DemoEvent(Object source,String msg,String email) {
        super(source);
        this.msg=msg;
        this.email=email;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}

然后定义事件监听器:

package com.foreveross.service.weixin.test.springevent;

import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 定义一个事件监听类
 * @author mingge
 *
 */
@Component
public class DemoEventListener implements ApplicationListener<DemoEvent>{

    //使用注解@Async支持 这样不仅可以支持通过调用,也支持异步调用,非常的灵活,
    @Async
    @Override
    public void onApplicationEvent(DemoEvent event) {
        System.out.println("注册成功,发送确认邮件为:" + event.getEmail()+",消息摘要为:"+event.getMsg());
    }

}

再次使用容器对事件进行发布:

package com.foreveross.service.weixin.test.springevent;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

/**
 * 事件发布类
 * @author mingge
 *
 */
@Component
public class DemoEventPublisher {

    @Autowired
    private ApplicationContext applicationContext;

    public void pushlish(String msg,String mail){
        applicationContext.publishEvent(new DemoEvent(this, msg,mail));
    }

}

最后就是测试了:

package com.foreveross.service.weixin.test.springevent;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.foreveross.service.weixin.test.springevent")
public class EventConfig {

}
package com.foreveross.service.weixin.test.springevent;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 事件测试类
 * @author mingge
 *
 */
public class EventTest {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(EventConfig.class);
        DemoEventPublisher demoEventPublisher=context.getBean(DemoEventPublisher.class);
        demoEventPublisher.pushlish("张三1","[email protected]");
        demoEventPublisher.pushlish("张三2","[email protected]");
        demoEventPublisher.pushlish("张三3","[email protected]");
        demoEventPublisher.pushlish("张三4","[email protected]");
        demoEventPublisher.pushlish("张三5","[email protected]");
        context.close();
    }
}

参考:http://blog.csdn.net/it_man/article/details/8440737

时间: 2024-10-08 20:12:38

spring 事件(Application Event)的相关文章

Spring Boot实战笔记(四)-- Spring常用配置(事件Application Event)

一.事件(Application Event) Spring的事件为Bean和Bean之间的消息通信提供了支持.当一个Bean处理完一个任务之后,希望另一个Bean知道并能做相应的处理,这时我们就需要让另一个Bean监听当前Bean所发送的事情. Spring的事件需要遵循如下流程: (1)自定义事件,集成ApplicationEvent. (2)定义事件监听器,实现ApplicationListener. (3)使用容器发布事件. 示例: 1.自定义事件. package com.ecwork

CL_GUI_ALV_GRID 触发PAI事件(Application event)

*&---------------------------------------------------------------------* *& Report Z_BARRY_ALV_GRID_EVENT *& *&---------------------------------------------------------------------* *& *& *&-------------------------------------

SpringBoot -- 事件(Application Event)

Spring的事件为Bean与Bean之间的消息通信提供了支持,当一个Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让一个Bean监听当前Bean所发送的事件. Spring的事件需要遵循如下流程: 自定义事件,集成ApplicationEvent. 定义事件监听器,实现ApplicationListener. 使用容器发布事件. 一.自定义事件 package com.cenobitor.appevent.event; import org.springf

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

版权声明:本文为博主原创文章,未经博主允许不得转载. 有事件,即有事件监听器. 有人问你spring监听器有哪些你看了下文即也知道了. 事件传播 ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传 播功能.通过Application. publishEvent方法,我们可以将事件通知系统内所有的 ApplicationListener. 事件传播的一个典型应用是,当Bean中的操作发生异常(如数据库连接失败),则通过事件传

spring 事件模式 源码导读

一,jdk 事件对象基类 package java.util; import java.io.Serializable; public class EventObject implements Serializable { protected transient Object source; public Object getSource() { return this.source; } public EventObject(Object paramObject) { if (paramObj

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

有事件,即有事件监听器. 有人问你spring监听器有哪些你看了下文即也知道了. 事件传播 ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传 播功能.通过Application. publishEvent方法,我们可以将事件通知系统内所有的 ApplicationListener. 事件传播的一个典型应用是,当Bean中的操作发生异常(如数据库连接失败),则通过事件传播 机制通知异常监听器进行处理.在笔者的一个项目中,就

Spring 事件监听

Spring 的核心是 ApplicationContext,它负责管理 Bean的完整生命周期:当加载 Bean 时,ApplicationContext 发布某些类型的事件:例如,当上下文启动时,ContextStartedEvent 发布消息,当上下文停止时,ContextStoppedEvent 发布消息: 通过 ApplicationEvent 类和 ApplicationListener 接口来提供在 ApplicationContext 中处理事件:如果一个 Bean 实现 App

TI-RTOS 之 事件同步(Event, 类似semaphore)

TI-RTOS 之 事件同步(Event, 类似semaphore) Event 是类似Semaphore的存在,官方如下描述: SYS/BIOS events are a means of communication between Tasks and other threads such as Hwis, Swis, and other Tasks, or between Tasks and other SYS/BIOS objects. Other SYS/BIOS objects inc

Spring 使用介绍(十一)—— Spring事件

一.简介 spring事件是观察者设计模式的实现,主要有三个元素: 事件 spring事件由ApplicationEvent定义 发布者 由ApplicationEventPublisher定义,而ApplicationContext继承自ApplicationEventPublisher 监听者 由ApplicationListener定义 简单示例: 自定义事件 public class TestEvent extends ApplicationEvent { private String