个人理解的@EventListener
使用场景:主要的事情执行完后,其他事情交给小弟执行
例如:买东西生成订单后,主要的事情已经完成,积分留给小弟执行
1.事件->(对象,用来接收传递的参数
@Data
public class TestEvent {
private String name;
}
2.监听器->(用来处理事件)
@EventListener 来进行监听
import com.alibaba.fastjson.JSON;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
public class TestListener {
/**
* 执行事件的第一个方法
* @param event
*/
@Order(1)
@EventListener(classes = TestEvent.class)
public void TestL(TestEvent event){
System.out.println(1);
System.out.println(JSON.toJSON(event));
}
/**
* 执行事件的第二个方法
* @param event
*/
@Order(2)
@EventListener(classes = TestEvent.class)
public void TestL1(TestEvent event){
System.out.println(2);
System.out.println(JSON.toJSON(event));
}
/**
* Object 所有事件都会执行
* @param event
*/
@EventListener(classes = Object.class)
public void sendMail1(Object event) {
System.out.println("执行");
}
}
3.发送事件->(触发事件的执行)
使用 ApplicationEventPublisher.publishEvent(事件对象)进行触发
@Resource
private ApplicationEventPublisher applicationEventPublisher;
public void testEvent(){
TestEvent event = new TestEvent();
event.setName("event");
// 发送事件
applicationEventPublisher.publishEvent(event);
}
注意:@EventListener(classes = Object.class)
因Object是所有类的父类,所有在使用时可能触发事件就会执行方法