springboot~ @EventListener事件监听的使用

1、自定义事件

首先要创建一个事件,监听都是围绕着事件来进行的。

/**
 * 

Description:自定义事件 */ public class MyEvent{ private String id; private String name; public MyEvent(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

2、自定义监听器

需要使用@Component注解来声明该监听需要被Spring 注入管理,在监听实现方法上添加 @EventListener 注解

import com.lin.entity.Dept;
import com.lin.event.MyEvent;
import com.lin.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 

Description:自定义监听器 */ @Component public class MyListener { @Autowired private DeptService deptService; @EventListener @Async //使用@Async实现异步监听 public void myListenerTest(MyEvent event){ System.out.println("这是监听器========="); Dept dept = deptService.get(event.getId()); System.out.println("根据id查询的结果是:"+dept); System.out.println("监听器结束========"); } }

3、发布事件

事件发布是由ApplicationContext(ApplicationContext继承ApplicationEventPublisher)对象管控的,在事件发布之前需要注入 ApplicationContext对象,然后通过 publishEvent 方法完成事件发布

@RestController
@RequestMapping("/dept")
public class DeptController  {

    @Autowired
    private DeptService deptService;

    @Autowired
    ApplicationEventPublisher publisher;
    

    @RequestMapping("/query")
    public Dept query(String id){
        Dept dept = deptService.selectById(id);
        //发布事件
        publisher.publishEvent(new MyEvent(id,""));

        return dept;
    }

参考:https://blog.csdn.net/hjing123/article/details/89203524

你可能感兴趣的:(springboot)