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注解, 所以这个方法是异步执行的, 如果不加, 那就是同步的, 效果跟普通调用也差不多