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

时间:2017-08-06 15:19:08

标签: java spring jpa asynchronous

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

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

1 个答案:

答案 0 :(得分:1)

应该不是问题。只需在#34;"之后的方法中启动一个新线程方法

AOP的工作原理如下(默认情况下):

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

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

  1. 应用程序调用代理方法
  2. 如果必须在目标方法之前执行某些操作(如已配置的@Before操作),则已完成。
  3. 调用真实/目标方法
  4. 如果必须在目标方法之后执行某些操作(例如已配置的@After操作),那么
  5. 已完成。
  6. 执行调用堆栈中的下一个方法
  7. 所以基本上用@After你只是"插入"调用堆栈中的方法。你可以从那里开始一个新的线程,它将立即返回控件,然后执行目标方法后的下一件事。