一、事件(Application Event)

  Spring的事件为Bean和Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另一个Bean知道并能做相应的处理,这时我们就需要让另一个Bean监听当前Bean所发送的事情。

  Spring的事件需要遵循如下流程:

  (1)自定义事件,集成ApplicationEvent。

  (2)定义事件监听器,实现ApplicationListener。

  (3)使用容器发布事件。

示例:

  1.自定义事件。

package com.ecworking.event;

import org.springframework.context.ApplicationEvent;

public class DemoEvent extends ApplicationEvent{
    private static final long serialVersionUID = 1L;
    private String msg;

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

    public String getMsg() {
        return msg;
    }

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

  2.事件监听器。

package com.ecworking.event;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class DemoListener implements ApplicationListener<DemoEvent> { //实现ApplicationListener接口,并指定监听的事件类型。
    public void onApplicationEvent(DemoEvent event){ //使用onApplicationEvent方法对消息进行接受处理。
        String msg = event.getMsg();
        System.out.println("bean-demoListener 接收到了 bean-demoPublisher 发布的消息:" + msg);
    }
}

  3.事件发布类。

package com.ecworking.event;

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

@Component
public class DemoPublisher {
    @Autowired
    ApplicationContext applicationContext; //注入ApplicationContext用来发布事件。

    public void publish(String msg){
        applicationContext.publishEvent(new DemoEvent(this, msg)); //使用 ApplcationContext 的 publishEvent 方法来发布。
    }
}

  4.配置类。

package com.ecworking.event;

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

@Configuration
@ComponentScan("com.ecworking.event")
public class EventConfig {
}

  5.运行。

package com.ecworking.event;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);

        DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);

        demoPublisher.publish("hello application event");

        context.close();
    }
}

运行结果:

 

posted on 2017-09-23 15:23  dyppp  阅读(1289)  评论(0编辑  收藏  举报