springboot 异步监听事件

springboot框架提供了监听的方法 具体实现看下面代码,

首先创建一个被监听的类, 继承ApplicationEvent 抽象类, 要实现一个有参的构造方法

public class TestEvent extends ApplicationEvent {


    public TestEvent(Object source) {
        super(source);
        System.out.println("这是一个事件的构造!!!!!继承了ApplicationEvent类");
      
    }
}

接下来再写一个监听类,用来监听上面的类

@Component
public class TestListener {
    @Async
    @EventListener(TestEvent.class)
    public void listener(TestEvent testEvent){
            
        System.out.println("这是一个监听类,监听对应的事件,监听TestEvent.class  该类须继承                                 ApplicationEvent ");
    }
}

自己定义一个方法 添加@EventListener(TestEvent.class) 注解, 注解中的TestEvent.class 是指定要监听的类,@Async 这个注解是为了让这个监听方法是异步执行的.   

 

接下来是监听的调用

@Controller
@RequestMapping("/listener")
public class TestListenerController {

    @Autowired
    private ApplicationEventPublisher publisher;
    @GetMapping("/test1")
    public void test1(){
        System.out.println("请求监听:");
        /*调用被监听的方法*/
        publisher.publishEvent( new TestEvent("323232"));
        System.out.println("该输出在请求方法最后");
    }
}

当调用被监听类中方法的时候首先  要注入ApplicationEventPublisher 类,    通过这个类调用  TestEvent 的有参构造,实例化,这时监听类   TestListener类中的  listener 方法就会执行,  因为加了@Async注解, 所以这个方法是异步执行的, 如果不加,  那就是同步的, 效果跟普通调用也差不多 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章