【Spring Boot】Spring基础 —— 事件(Application Event)

事件(Application Event)


文章目录

      • 1.概论
      • 2.新建包
      • 3.自定义事件
      • 4.定义事件监听器
      • 5.定义事件发布类
      • 6.定义配置类
      • 7.定义测试主类
      • 8.测试




1.概论

Spring的事件(Application Event)为Bean与Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让另外一个Bean监听当前Bean所发送的事件。
Spring的事件需要遵循如下流程:
(1)自定义事件,集成ApplicationEvent。
(2)定义事件监听器,实现ApplicationListener。
(3)使用容器发布事件。
下面我们通过一个实际例子来对Spring中的事件进行一个加深的了解。




2.新建包

首先需要在 “src/main/java/com/study/spring/” 下建立一个新的包"ch2.event",然后在这个包下再新建5个类,项目的结构如下图所示:
【Spring Boot】Spring基础 —— 事件(Application Event)_第1张图片



3.自定义事件

自定义事件类DemoEven的内容如下:

package com.study.spring.ch2.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;
    }
}



4.定义事件监听器

事件监听器类DemoListener的内容如下:

package com.study.spring.ch2.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);
    }
}



5.定义事件发布类

事件发布类DemoPublisher的内容如下:

package com.study.spring.ch2.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));   //使用ApplicationContext的publishEvent方法来发布事件
    }
}



6.定义配置类

配置类EventConfig的内容如下:

package com.study.spring.ch2.event;

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

@Configuration
@ComponentScan("com.study.spring.ch2.event")
public class EventConfig {
}



7.定义测试主类

测试主类Main的内容如下:

package com.study.spring.ch2.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("this is a event");
        context.close();
    }
}



8.测试

选择刚刚建立的测试主类Main文件,右键,在弹出的窗体中选择"Run",效果如下:
【Spring Boot】Spring基础 —— 事件(Application Event)_第2张图片
从上面的测试结果可以看出,随着事件发布类DemoPublisher的publish事件的发生,事件监听类DemoListener能够及时的对其做出预期响应。




你可能感兴趣的:(#,Spring,基础,Spring,Boot)