image.png
Spring事件机制实现观察者模式
场景:
//订单创建发送短信,邮件
public void save(OrderInfo info) {
saveOrder(info);
sendMessage(info);
sendEmail(info);
....
}
缺点:
违背了单一职责原则和开闭原则
优化方案:
1.创建Order事件
@Data
public class OrderCreateEvent extends ApplicationEvent {
private OrderInfo orderInfo;
public OrderCreateEvent(OrderInfo orderInfo) {
super(orderInfo);
this.orderInfo = orderInfo;
}
}
2.创建监听类,监听事件
@Slf4j
@Component
@Order(1)
public class OrderMessageListener implements ApplicationListener<OrderCreateEvent> {
@Override
public void onApplicationEvent(OrderCreateEvent event) {
OrderInfo orderInfo = event.getOrderInfo();
sendMessage(orderInfo);
}
}
@Slf4j
@Component
@Order(2)
public class OrderEmailListener implements ApplicationListener<OrderCreateEvent> {
@Override
public void onApplicationEvent(OrderCreateEvent event) {
OrderInfo orderInfo = event.getOrderInfo();
sendEmail(orderInfo);
}
}
3.推送事件
//订单创建发送短信,邮件
@Autowired
private ApplicationContext applicationContext;
public void save(OrderInfo info) {
saveOrder(info);
applicationContext.publishEvent(new OrderCreateEvent(info));
....
}