1.定义事件

1)定义自定义事件类,继承ApplicationEvent,通过在构造方法中执行父类ApplicationEvent的构造方法,传入事件中需要的操作数据。

public class CustomEvent extends ApplicationEvent {
    public CustomEvent(String source) {
        super(source);
    }
}

2.推送事件

1)注入ApplicationEventPublisher实例

    @Resource
    private ApplicationEventPublisher applicationEventPublisher;

2)通过publishEvent方法来发送事件

        //创建事件
        CustomEvent customEvent=new CustomEvent("张三");
        //发送事件
        applicationEventPublisher.publishEvent(customEvent);

3.订阅事件

1.第一种方式

通过@EventListener来监听事件,其中被标记的方法的参数为监听的事件类型

     @EventListener
    public void handleEvent(CustomEvent event){
        String source = (String)event.getSource();
        log.info("==================sub1订阅  {}  成功==================",source);
    }

2.第二种方式

通过实现ApplicationListener<CustomEvent>接口,并实现其方法onApplicationEvent,做到事件监听

@Service
@Slf4j
public class Sub2 implements ApplicationListener<CustomEvent> {
    

    /**第二种监听事件方法
     * 通过ApplicationListener来监听自己定义的CustomEvent事件,一但此事件发布成功,就立即被这边监听器监听到,其中event.getSource()是事件中封装的数据
     * @param event
     */
    @Override
    public void onApplicationEvent(CustomEvent event) {
        String source = (String)event.getSource();
        log.info("==================sub1订阅  {}  成功==================",source);
    }
}