08-SpringBoot——Spring常用配置-事件

来源:互联网 发布:分布式通信 java 编辑:程序博客网 时间:2024/05/21 06:54

Spring常用配置-事件


【博文目录>>>】


【项目源码>>>】


【事件】


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

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

(1)自定义事件,集成ApplicationEvent。(2)定义事件监听器,实现ApplicationListener。(3)使用容器发布事件。

【代码实现】

package com.example.spring.framework.event;import org.springframework.context.ApplicationEvent;/** * 自定义事件 * * Author: 王俊超 * Date: 2017-07-11 07:33 * All Rights Reserved !!! */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;    }}
package com.example.spring.framework.event;import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;/** * 事件监听器 * 实现ApplicationListener 接口,并指定监听的事件类型。 * Author: 王俊超 * Date: 2017-07-11 07:37 * All Rights Reserved !!! */@Componentpublic class DemoListener implements ApplicationListener<DemoEvent> {    /**     * 使用onApplicationEvent 方法对消息进行接受处理。     *     * @param event     */    @Override    public void onApplicationEvent(DemoEvent event) {        String msg = event.getMsg();        System.out.println("我(bean-demoListener)接受到了bean-demoPublisher发布的消息:" + msg);        System.out.println("发生事件的对象是:" + event.getSource());    }}
package com.example.spring.framework.event;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Component;/** * 事件发布类 * ①注入ApplicationContext用来发布事件。 * ②使用ApplicationContext的publishEvent方法来发布。 * Author: 王俊超 * Date: 2017-07-11 07:38 * All Rights Reserved !!! */@Componentpublic class DemoPublisher {    @Autowired    ApplicationContext applicationContext;    public void publish(String msg) {        applicationContext.publishEvent(new DemoEvent(this, msg));    }}
package com.example.spring.framework.event;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;/** * Author: 王俊超 * Date: 2017-07-11 07:39 * All Rights Reserved !!! */@Configuration@ComponentScan("com.example.spring.framework.event")public class EventConfig {}
package com.example.spring.framework.event;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** * Author: 王俊超 * Date: 2017-07-11 07:32 * All Rights Reserved !!! */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();    }}

【运行结果】


这里写图片描述

原创粉丝点击