但行好事  莫问前程

Spring4.x常用配置(五):Spring事件

一. 点睛

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

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

1. 自定义事件,继承ApplicationEvent
2. 定义事件监听器,实现ApplicationListener

二. 示例

1.自定义事件

package org.light4j.sping4.usually.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 org.light4j.sping4.usually.event;

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

@Component
public class DemoListener implements ApplicationListener<DemoEvent> {//①

    public void onApplicationEvent(DemoEvent event) {//②

        String msg = event.getMsg();

        System.out.println("我(bean-demoListener)接受到了bean-demoPublisher发布的消息:"+ msg);

    }
}

代码解释:

① 实现ApplicationListener接口,并指定监听的事件类型。
② 使用onApplicationEvent方法对消息进行接受处理。

3. 事件发布类

package org.light4j.sping4.usually.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;//①

    public void publish(String msg){
        applicationContext.publishEvent(new DemoEvent(this, msg));//②
    }

}

代码解释:

① 注入ApplicationContext 用来发布事件。
② 使用ApplicationContext publishEvent方法来进行发布。

4. 配置类

package org.light4j.sping4.usually.event;

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

@Configuration
@ComponentScan("org.light4j.sping4.usually.event")
public class EventConfig {

}

5. 运行

package org.light4j.sping4.usually.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();
    }
}

运行结果如下图所示:
event

6. 源代码示例:

github地址:点击查看
码云地址:点击查看

打赏
欢迎关注人生设计师的微信公众账号
公众号ID:longjiazuoA

未经允许不得转载:人生设计师 » Spring4.x常用配置(五):Spring事件

分享到:更多 ()

人生设计师-接受不同的声音

联系我关于我