Spring事件监听

# spring中事件监听与推送

**业务场景**:定时任务需要推送事件,监听器监听事件并对事件进行业务逻辑执行,这样使代码的关联度降低,时效性更强,spring中IOC思想就是解耦的一种体现,毕竟在一个实现类中如果调用另一个实现类不用繁琐的创建对象,只需要把需要用到实现类进行注入就可以了,减少代码量的同时也便于后期的拓展与维护。

# 1.事件监听组件

## *1.1事件源*

 **可以理解为事件类型。比如说我们将的发送邮件或是发送短信都算是一种事件类型,都可以叫做事件源。**

## *1.2发布器*

**发布器也可作为事件发布者,主要作用是发布事件,一班用于逻辑完成之后进行事件发布。**

## *1.3监听器*

**主要作用就是监听是否有事件发布,如果有则执行对应的业务处理。**

## 1.4三者关系流程:

事件发布器-->事件源-->事件监听器-->监听到指定事件后执行对应的业务逻辑处理

# 2.事件发布(结和无极2.0代码分析)

## 2.1事件源

**盘点计划到达指定时间后发送id。**

**首先定义事件源,需要继承spring中事件的顶级父类,实现如下**:

```java
public class TWmsCheckPlanEvent extends ApplicationEvent {
    //消息发送具体内容
    @Getter
    private final Integer planId;
    @Getter
    private final Integer warehouseId;

    public TWmsCheckPlanEvent(Object source, Integer planId, Integer warehouseId) {
        super(source);
        this.planId = planId;
        this.warehouseId = warehouseId;
    }

}
```

## 2.2发布器

```java
   private final ApplicationEventPublisher publisher;
```

  发布推送

```java
 publisher.publishEvent(new TWmsCheckPlanEvent(this, planId, warehouseId));
```

## 2.3监听器

```java
@Component
public class TWmsCheckListener implements ApplicationListener<TWmsCheckPlanEvent> {
    private static final Logger LOGGER = LoggerFactory.getLogger(TWmsCheckListener.class);
   // @EventListener(classes = TWmsCheckPlanEvent.class)
    @Override
    public void onApplicationEvent(TWmsCheckPlanEvent event) {
        LOGGER.info("盘点计划plan_id:{}",event.getPlanId());
        LOGGER.info("仓库warehouse_id:{}",event.getWarehouseId());
    }

}
```

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值