Spring Event
Spring Event 其实就是一个观察者设计模式,一个 Bean 处理完成任务之后,希望通知其他的 bean 或者说一个 Bean 想观察另一个 Bean 的行为。
事件对象
java
@ToString
public class RequestEvent extends ApplicationEvent {
private String username;
public RequestEvent(Object source,String username) {
super(source);
this.username = username;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
事件发布者
java
@Slf4j
@Component
@AllArgsConstructor
public class RequestEventPusher {
private ApplicationContext applicationContext;
public void pushEvent(String username) {
log.info("发送者发送消息:{}",username);
applicationContext.publishEvent(new RequestEvent(this,username));
}
}
事件消费者
同步消费
java
@Component
@Slf4j
public class RequestEventListener implements ApplicationListener<RequestEvent> {
@Override
public void onApplicationEvent(RequestEvent event) {
log.info("RequestEventListener-收到消息:{}",event.getUsername());
}
}
异步消费
java
@EnableAsync
java
@Component
@Slf4j
public class RequestEventAsyncListener {
@Async
@EventListener(RequestEvent.class)
public void listenerRequestEvent(RequestEvent requestEvent) {
log.info("RequestEventAsyncListener 收到消息:{}",requestEvent.getUsername());
}
}