随笔 - 441  文章 - 4  评论 - 84  阅读 - 109万 

概述

在编写代码的时候,比如我删除一篇文章,这个时候,如果我想做些额外的逻辑,这是就需要修改删除部分的代码。spring 提供了事件机制更优雅的实现这个,用户只需要实现事件监听即可。

代码实现

注入发布者

public class KnowledgeBaseService implements ApplicationEventPublisherAware {

  private final KnowledgeBaseArticleRepository knowledgeBaseArticleRepository;
  private ApplicationEventPublisher applicationEventPublisher;

  public KnowledgeBaseService(
      KnowledgeBaseArticleRepository knowledgeBaseArticleRepository) {
    this.knowledgeBaseArticleRepository = knowledgeBaseArticleRepository;
  }
  // 注入事件发布者
  @Override
  public void setApplicationEventPublisher(
      @NotNull ApplicationEventPublisher applicationEventPublisher) {
    this.applicationEventPublisher = applicationEventPublisher;
  }

发布事件

public void deleteArticle(UUID id) {
    knowledgeBaseArticleRepository.findById(id).ifPresent(article -> {
      knowledgeBaseArticleRepository.delete(article);
      applicationEventPublisher.publishEvent(
          new KnowledgeBaseArticleDeletedEvent(
              article.toKnowledgeBaseArticle()));
    });
  }

处理事件

@EventListener
  @Async
  public void handleArticleDeleted(KnowledgeBaseArticleDeletedEvent event) {
    documentLoader.deleteDocumentsByArticle(
        (KnowledgeBaseArticle) event.getSource());
  }
posted on   自由港  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2020-06-19 使用nginx 压缩
2009-06-19 动态读取swf文件显示问题
点击右上角即可分享
微信分享提示