spring中的监听发布事件

springboot 事件监听与发布
springboot 事件发布与监听大致分为三块

事件定义
定义自己的事件类,继承 ApplicationEvent

事件发布
注入事件发布类 ApplicationEventPublisher,使用 publishEvent 方法发布相应的事件

事件监听
实现 ApplicationListener 接口,实现 onApplicationEvent 方法或者使用注解 @EventListener 进行事件监听

例子:

1.事件定义

public class StudentEvent<T> extends ApplicationEvent {
    private  T data;

    public StudentEvent(T source) {
        super(source);
        this.data = source;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

2.事件发布

public class TestController {
    private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

    private final ApplicationEventPublisher applicationEventPublisher;

    public TestController(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

    @PostMapping("/addStudent")
    public String test(@RequestBody Student student){
    	LOGGER.info("新增的学生信息:"+student.toString());
        applicationEventPublisher.publishEvent(new StudentEvent<>(student));
        return "success";
    }
}

3.事件监听

    @EventListener
    public void addStudentListener1(StudentEvent<Student> studentTestEvent){
        LOGGER.info("监听到的信息1:"+studentTestEvent.getData());
    }

扩展:
一个事件可以有多个事件的监听,可以像下面这样有多个监听的方法来做业务处理逻辑,如果我们需要定义每一个监听方法的执行顺序,可以使用 @order 注解来进行定义。
@order 注解的值传入的越小,执行顺序优先。

    @EventListener
    @Order(1)
    public void addStudentListener1(StudentEvent<Student> studentTestEvent){
        LOGGER.info("监听到的信息1:"+studentTestEvent.getData());
    }

    @EventListener
    @Order(3)
    public void addStudentListener3(StudentEvent<Student> studentTestEvent){
        LOGGER.info("监听到的信息3:"+studentTestEvent.getData());
    }

    @EventListener
    @Order(2)
    public void addStudentListener2(StudentEvent<Student> studentTestEvent){
        LOGGER.info("监听到的信息2:"+studentTestEvent.getData());
    }

注意
1、事件监听类需要被 spring 进行管理
2、事件的发布和监听操作是同步执行的,如果有事务,监听操作也会在事务内
3、同一个发布的事件是可以有多个监听的方法的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值