当前位置:   article > 正文

Spring中的ApplicationContext.publishEvent

Spring中的ApplicationContext.publishEvent

简单理解

其实就是监听处理。比如找工作平台上,雇主 employer 发布自己的雇佣条件,目的是平台中有符合条件的求职者时,及时向雇主推荐。求职者发布简历,当平台发现某个求职者比较符合条件,就触发被动,推荐给雇主。

实现的组成

  1. XXXXXXXEvent:容器事件,相当于上方的【目的是平台中有符合条件的求职者时,及时向雇主推荐】。这个事件继承ApplicationEvent,声明我是一个事件。
  2. XXXXXXXEventListener:事件监听器,相当于上方的【当平台发现某个求职者比较符合条件,就触发被动,推荐给雇主。】。其实包含两个主要功能:一个是监听某个event是否被发布了,一个是若是event被发布了,之后的处理操作。继承ApplicationListener
  3. applicationContext.publishEvent:发布事件,用来触发容器事件。相当于上方的【求职者发布简历】。该方法相当于人为去发布事件,进而引起EventListener中内容的执行。但当系统创建spring容器、加载spring容器时会自动触发容器事件

使用场景

当系统中的某个操作可在多个功能中被执行时,且该操作所需参数固定,使用这一方法可大大减少代码量;
不同Bean之间进行传递时,也可实现解耦。

举例

文件结构(只做参考)

在这里插入图片描述

applicationContext.publishEvent发布事件
    @Autowired
    private ApplicationContext applicationContext;

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult<BillSupplier> test(@RequestParam(value = "param2") String param2) {
    
        applicationContext.publishEvent(new XXXXEvent(this, param2));
        
        return CommonResult.success("测试成功!");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
XXXXEvent.java
@Getter
@Setter
public class XXXXEvent extends ApplicationEvent {
    private param2;

    public XXXXEvent(Object source, param2) {
        super(source);
        this.param2 = param2;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
XXXXHandler.java
@EnableAsync
public class XXXXHandler implements ApplicationListener {

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof XXXXEvent) {
            try {
                // 此处为处理逻辑
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            // log.info("容器本身事件:" + event);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
	此处介绍一下instanceof:
	作用:检查左侧对象是否为右侧类或其子类的实例,若是则为true,否则为false。
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/146764
推荐阅读
相关标签
  

闽ICP备14008679号