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

Java 异步执行@Aspect类或JPA事件观察者,java,spring,jpa,asynchronous,Java,Spring,Jpa,Asynchronous,是否可以执行注释为@After(在注释为@Aspec的类中)异步的方法?例如,使用注释@Async或实现可运行或可调用。对于注释为@PostPersist的方法也有同样的问题 真正的情况是注册后发送邮件。我不想从某个MailService in register方法中执行方法,因为该服务将有太多依赖项,并且将难以测试。但是发送邮件必须异步执行,因为此操作非常昂贵。应该不会有问题。只需在“after”方法中启动一个新线程 AOP的工作方式如下(默认情况下): 当您注册一个需要应用某些方面的bean

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


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

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

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

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

例如,当您告诉Spring在某个目标方法之后执行一个方法时,会发生以下情况:

  • 应用程序调用代理的方法
  • 如果必须在目标方法之前执行某些操作(如在操作之前配置的
    ),那么它就完成了
  • 调用real/target方法
  • 如果必须在目标方法之后执行某些操作(如在操作之后配置的
    @),那么它就完成了
  • 执行调用堆栈中的下一个方法
  • 因此,基本上只要在调用堆栈中“插入”一个方法,就可以使用@。您可以从那里启动一个新线程,它将立即返回控件,目标方法之后的下一件事将被执行