Java事件监听实际应用(实现将数据处理和后续逻辑解耦)

1、 创建实体类
@Data
public class LiveActivityAddModel {
    /**
     * 数据保存id集合
     */
    private List<String> liveListAdd;

    /**
     * 商会ckey
     */
    private String ckey;

    /**
     *  1-主推,2-分类,3-活动报名模块
     */
    private Integer type;

    /**
     * 分类id
     */
    private Integer classifyId;

    /**
     * 业务类型, 1-活动,2-直播
     */
    private Integer businessType;

}
 2、定义一个名为LiveEvent的类,该类继承自ApplicationEvent。它表示一个自定义的事件,用于在应用程序中发布和传递信息,构造方法LiveEvent(Object source, LiveActivityAddModel liveActivityAddModel),它继承了ApplicationEvent的构造方法,并接受两个参数:source表示事件的来源,liveActivityAddModel表示与事件相关的数据。在构造方法内部,通过调用父类的构造方法来初始化事件的来源,然后将传入的liveActivityAddModel赋值给类的属性liveActivityAddModel
/**
 * @author zhc
 * 添加事件
 */
public class LiveEvent extends ApplicationEvent {

    private LiveActivityAddModel liveActivityAddModel;


    public LiveEvent(Object source,LiveActivityAddModel liveActivityAddModel) {
        super(source);
        this.liveActivityAddModel = liveActivityAddModel;
    }

    public LiveActivityAddModel getLiveActivityAddModel() {
        return liveActivityAddModel;
    }

    public void setLiveActivityAddModel(LiveActivityAddModel liveActivityAddModel) {
        this.liveActivityAddModel = liveActivityAddModel;
    }
}
3、创建推送类(EventPublisher类的作用是将LiveEvent自定义事件发布到应用程序上下文中,以便其他组件或模块对该事件进行监听和处理。)
/**
 * @author zhc
 */
@Component
public class EventPublisher {
    @Autowired
    private ApplicationContext applicationContext;


    public void addLiveActivityEvent(LiveActivityAddModel liveActivityAddModel) {
        LiveEvent channelEvent = new LiveEvent(this, liveActivityAddModel);
        applicationContext.publishEvent(channelEvent);
    }
}
4、创建监听器(LiveListener类是一个监听LiveEvent事件的监听器。当收到该事件时,会将事件中传递的数据进行相应操作)
@Slf4j
@Component
public class LiveListener implements ApplicationListener<LiveEvent> {
    @Autowired
    private LiveListService liveListService;

    @Override
    public void onApplicationEvent(LiveEvent liveEvent) {
        try {
            LiveActivityAddModel addModel = liveEvent.getLiveActivityAddModel();
            if (Objects.nonNull(addModel)){
                List<String> list = addModel.getLiveListAdd();
                List<LiveList> lists = new ArrayList<>();
                int i = 1;
                for (String s : list) {
                    LiveList liveList = new LiveList();
                    liveList.setClassifyId(addModel.getClassifyId());
                    liveList.setBusinessId(s);
                    liveList.setCkey(addModel.getCkey());
                    liveList.setType(addModel.getType());
                    liveList.setBusinessType(addModel.getBusinessType());
                    liveList.setShowSort(i++);
                    lists.add(liveList);
                }
                liveListService.saveBatch(lists);
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new ServiceException("数据保存失败!");
        }
    }
}
5、创建事件并且发布(通过调用eventPublisher.addLiveActivityEvent(model)方法,将创建的LiveActivityAddModel对象传递给EventPublisher组件的addLiveActivityEvent()方法,从而触发一个自定义事件。在自定义事件的处理过程中,之前介绍的LiveListener监听器会接收到该事件并执行相应的处理逻辑)
    public void dateWithAdd(String ckey, String classifyId, List<String> ids, Integer type, Integer businessType) {
        // 数据处理
        LiveActivityAddModel model = new LiveActivityAddModel();
        model.setCkey(ckey);
        model.setClassifyId(Integer.valueOf(classifyId));
        model.setLiveListAdd(ids);
        model.setType(type);
        model.setBusinessType(businessType);
        eventPublisher.addLiveActivityEvent(model);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值