二-Spring常用配置(3)-事件(Application Event)-【JavaEE开发的颠覆者】

93 阅读1分钟

一、事件

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

1.示例
(1)自定义事件

//自定义事件
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)事件监听器

//事件监听器
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {

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

(3)事件法布类

//事件发布类
@Component
public class DemoPublisher {
    @Autowired
    ApplicationContext applicationContext;

    public void publish(String msg){
        applicationContext.publishEvent(new DemoEvent(this,msg));
    }
}
/**
 * 注入ApplicationContext用来发布事件
 * 使用ApplicationContect的publishEvent方法来发布
 */

(4)配置类

@Configuration
@ComponentScan("com.zhao.spring.ApplicationEvent")
public class EventConfig {

}

(5)启动类

public class EventMain {
    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();
    }
}

这里写图片描述


需要注意的是,这种事件机制并不是普通的监听发送某些东西,而是监听发送一个事件,publish的是Event:
这里写图片描述