ApplicationEvent-Spring的事件使用
作者:互联网
1、Spring事件使用思路
Spring的事件为Bean与Bean之间的消息通信提供了支持,当一个Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让一个Bean监听当前Bean所发送的事件。
Spring的事件需要遵循如下流程:
- 自定义事件,集成ApplicationEvent。
- 定义事件监听器,实现ApplicationListener。
- 使用容器发布事件。
2、ApplicationEvent事件的使用
2.1 自定义事件
实现ApplicationEvent接口
import org.springframework.context.ApplicationEvent;
public class MyFirstEvent extends ApplicationEvent {
private static final long serialVersionUID = 1L;
private String msg;
//构造函数
public MyFirstEvent(Object source, String msg) {
super(source);
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.2 定义事件监听器
实现ApplicationListener接口
注意1:需要将事件的监听器加入到IOC容器中,交由Spring管理(使用@Component注解)。
注意2:因为传入的事件类是:MyFirstEvent,故该事件监听器只负责监听:MyFirstEvent类型的事件,其他事件不管
注意3:如果泛型参数为ApplicationEvent ,则表示监听所有类型的事件。
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class MyFirstEventListener implements ApplicationListener<MyFirstEvent> {
@Override
public void onApplicationEvent(MyFirstEvent myFirstEvent) {
String msg = myFirstEvent.getMsg();
System.out.println("事件监听者接收到的消息为:"+msg);
}
}
2.3 定义事件发布者
使用ApplicationContext 进行事件的发布
import com.yuyufeng.springbootmybatisdynamic.event.MyFirstEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/my_first_listener")
public class MyFirstListenerController {
//通过依赖注入,注入ApplicationContext:IOC容器
@Autowired
private ApplicationContext applicationContext;
@GetMapping("/test/{msg}")
public void test1(@PathVariable("msg") String msg){
System.out.println("事件发布者发布消息:"+msg);
//用IOC容器来发布事件
applicationContext.publishEvent(new MyFirstEvent(this,msg));
}
}
2.4 效果
标签:Spring,springframework,事件,org,msg,import,public,ApplicationEvent 来源: https://blog.csdn.net/weixin_43911286/article/details/112692327