Spring自定义事件注解版 - 记录

本文介绍了如何在Spring中使用自定义事件注解实现代码解耦,通过创建事件、监听器并控制执行顺序,实现支付成功后的多任务处理,如会员天数增加、消息发送和数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring自定义事件注解版

可用于代码解耦,例如:购买会员支付成功,发布订单支付成功事件。然后多个监听器开始执行:增加会员天数 --> 发送购买成功消息 --> 通知对账系统同步数据 。等等等等

二、使用步骤

1.创建自定义事件

代码如下(示例):

import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;

/**
 * 自定义事件
 *
 * @author
 * @date 2021/1/29 14:32
 */
@Getter
@Setter
public class MyEvent extends ApplicationEvent {


	/**
	* 自定义事件
	*/
    public MyEvent(MyOrder myOrder) {
        super(myOrder);
    }

}


2.创建监听器

@EventListener 注解,表示该方法为监听方法

@Order注解,表示执行顺序,可不添加。不添加就无法控制其执行顺序

@Async注解,可开启监听方法的异步执行,加了该注解则@Order无效

package com.ivan.event.listener;

import com.ivan.event.event.MyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

/**
 * @author 
 * @date 2021/1/29 14:39
 */
@Component
public class MyEventListener {

    @EventListener
    @Order(20)
    public void listen1(MyEvent myEvent){
        System.out.println("监听器1:"+myEvent.getSource());
    }

    @EventListener
    @Order(19)
    public void listen2(MyEvent myEvent){
        System.out.println("监听器2:"+myEvent.getSource());
    }
}

3.发布事件

代码如下(示例):

package com.ivan.event;

import com.ivan.event.dto.Order;
import com.ivan.event.event.MyEvent;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;

@SpringBootTest
class EventDemoApplicationTests {

    @Autowired
    private ApplicationContext applicationContext;

    @Test
    void contextLoads() {
        Order order=new Order().setId(1L).setName("牛逼").setPrice("100.5");
        MyEvent myEvent = new MyEvent(order);
        applicationContext.publishEvent(myEvent);
        System.out.println(1);
    }

}

运行结果(示例):

运行示例


总结

1、多个监听器默认是同步执行的,且先后执行顺序不一定
2、若要指定执行顺序则可以添加@Order注解,@Order值越小越优先执行
3、若要实现异步执行则在方法上添加 @Async 即可。(记得在Application上添加 @EnableAsync 注解,表示开启异步)。若在监听方法上加了@Async 则这个方法的 @Order注解不生效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值