1.首先介绍下如何使用Spring的监听器
1.1 声明监听器,只要在方法上加上@EventListener注解就可以了,注解和方法参数就是事件类型
@Component
public class AppEventListener {
public AppEventListener(){
System.out.println("AppEventListener...");
}
@EventListener(MessageEvent.class) //监听事件
public void listenMessage(MessageEvent event){
System.out.println("Message事件到达..."+event+";已发送邮件....");
}
@EventListener(ChangeEvent.class)
public void listenChange(ChangeEvent event){
System.out.println("Change事件到达..."+event+";已同步状态....");
}
@EventListener(PayloadApplicationEvent.class) //感知任意对象事件的
public void listenPayload(PayloadApplicationEvent<A> event){
System.out.println("Payload事件到达..."+event.getPayload()+";已进行处理....");
}
}
1.2 声明事件 继承ApplicationEvent类
public class ChangeEvent extends ApplicationEvent implements Serializable {
private static final long serialVersionUID = 0L;
private String state;
private ChangeEvent(Object source) {
super(source);
}
public ChangeEvent(Object source,String state){
super(source);
this.state = state;
}
public String getState() {
return state;
}
@Override
public String toString() {
return "ChangeEvent{" +
"state='" + state + '\'' +
", source=" + source +
'}';
}
}
1.3 事件发布器
/**
* 事件发布器
*/
@Component
public class AppEventPublisher implements ApplicationEventPublisherAware {
ApplicationEventPublisher eventPublisher;
public AppEventPublisher(){
System.out.println("AppEventPublisher....");
}
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.eventPublisher = applicationEventPublisher;
}
public void publish(ApplicationEvent applicationEvent){
eventPublisher.publishEvent(applicationEvent);
}
public void publish(Object o){
eventPublisher.publishEvent(o);
}
}
2. 原理
首先在Annotation