场景
很多时候当我们完成某些业务后需要给用户推送相关消息提醒。对于这种非核心业务功能我们可以拿出来,创建一个事件去异步执行,从而实现核心业务和子业务的解耦。
实现
定义事件类 Event
创建一个类,继承ApplicationEvent
,并重写构造函数。ApplicationEvent
是Spring提供的所有应用程序事件扩展类。
public class NoticeEvent extends ApplicationEvent {
private static final Logger logger = LoggerFactory.getLogger(NoticeEvent.class);
/**
* 接受信息
*/
private String message;
public NoticeEvent(String message) {
super(message);
this.message = message;
logger.info("add event success! message: {}", message);
}
public String getMessage() {
return message;
}
}
创建事件监听类 Listener
创建一个用于监听指定事件的类,需要实现ApplicationListener
接口,说明它是一个应用程序事件的监听类。注意这里需要加上@Component
注解,将其注入Spring容器中。
@Component
public class NoticeListener implements ApplicationListener<NoticeEvent> {
private static final Logger logger = LoggerFactory.getLogger(NoticeListener.class);
@Override
public void onApplicationEvent(NoticeEvent noticeEvent) {
logger.info("listener get event, sleep 2 second...");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info("event message is : {}", noticeEvent.getMessage());