美文网首页
发布订阅 - 进行简单解耦

发布订阅 - 进行简单解耦

作者: flyjar | 来源:发表于2022-06-28 13:36 被阅读0次

    ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。

    简单实用(目标是进行解耦)

    1、定义个被监听的元素

    /**
     * 定义个被监听的元素
     * @author jarfly
     */
    @Data
    @AllArgsConstructor
    public class SubmitOrderEvent {
        /**
         * 完整的订单信息
         */
        private final ShopCartOrderMergerDto mergerOrder;
    
        private List<Order> orders;
    
    }
    
    

    2、定义监听事件

    /**
     * 确认订单信息时的默认操作
     *
     * @author jarfly
     */
    @Component("defaultSubmitOrderListener")
    @AllArgsConstructor
    public class SubmitOrderListener {
    
       // 上面有个全参构造方法自动就把userAddrOrderService注入进来了
       private final UserAddrOrderService userAddrOrderService;
        
        /**
         * 计算订单金额
         */
        @EventListener(SubmitOrderEvent.class)
        public void defaultSubmitOrderListener(SubmitOrderEvent event) {
               /**
             * 省略一系列业务操作
             */
               userAddrOrderService.save(userAddrOrder);
      }
    }
    

    3、发布事件

    @Service
    public class OrderServiceImpl  implements OrderService {
        
         //也可以使用ApplicationContext,ApplicationContext继承了ApplicationEventPublisher
        @Autowired
        private ApplicationEventPublisher eventPublisher;
    
    
        @Override
        @Transactional(rollbackFor = Exception.class)
        public void submit(String userId, ShopCartOrderMergerDto mergerOrder) {
        
            /**
             * 省略一系列业务操作
             */
            eventPublisher.publishEvent(new SubmitOrderEvent(mergerOrder, orderList));
    
             /**
             * 省略一系列业务操作
             */
        }
    }
    

    相关文章

      网友评论

          本文标题:发布订阅 - 进行简单解耦

          本文链接:https://www.haomeiwen.com/subject/cobavrtx.html