gpt4 book ai didi

java - 异步执行@Aspect类或JPA事件观察器

转载 作者:行者123 更新时间:2023-11-30 06:33:57 27 4
gpt4 key购买 nike

是否可以异步执行注释为@After(在注释为@Aspec的类中)的方法?例如使用注释 @Async 或实现 Runnable 或 Callable。对于注释为 @PostPersist 的方法也有同样的问题。

真实案例是注册后发送邮件。我不想在注册方法中执行某些 MailService 的方法,因为该服务将具有太多依赖项并且难以测试。但发送邮件必须异步执行,因为此操作非常昂贵。

最佳答案

应该不是问题。只需在“after”方法中启动一个新线程即可。

AOP 的工作方式如下(默认情况下):

当你注册一个需要应用某些方面的bean时,Spring会围绕该bean创建一个代理,当你从应用程序上下文(通过ctx.getBean(MyBean.class)Autowire在某处)获取该bean时,你会收到内部有真实/目标 bean 的代理。

因此,例如,当您告诉 Spring 在某个目标方法之后执行一个方法时,就会发生这种情况:

  1. 应用程序调用代理的方法
  2. 如果必须在目标方法之前执行某些操作(例如配置的 @Before 操作),则已完成。
  3. 调用真实/目标方法
  4. 如果必须在目标方法之后执行某些操作(例如配置的 @After 操作),则已完成。
  5. 执行调用堆栈中的下一个方法

所以基本上使用 @After 你只需在调用堆栈中“插入”一个方法。您可以从那里启动一个新线程,它将立即返回控制权,并执行目标方法之后的下一件事。

关于java - 异步执行@Aspect类或JPA事件观察器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45533469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com