是否可以执行注释为@After(在类注释为@Aspec)异步的方法?例如,使用注释@Async或实现Runnable或Callable。对于注释为@PostPersist的方法也是同样的问题。
真实案例是在注册后发送邮件。我不想在寄存器方法中从某些MailService执行方法,因为这个服务将具有太多的依赖性并且将难以测试。但是发送邮件必须异步执行,因为这个操作非常昂贵。
答案 0 :(得分:1)
应该不是问题。只需在#34;"之后的方法中启动一个新线程方法
AOP的工作原理如下(默认情况下):
当你注册一个需要应用某些方面的bean时,Spring会在该bean周围创建一个代理,当你从应用程序上下文中获取bean时(ctx.getBean(MyBean.class)
或Autowire
来自某个地方) )你收到里面有真实/目标bean的代理。
因此,例如,当你告诉Spring在某种目标方法之后执行一个方法时会发生这种情况:
@Before
操作),则已完成。@After
操作),那么所以基本上用@After你只是"插入"调用堆栈中的方法。你可以从那里开始一个新的线程,它将立即返回控件,然后执行目标方法后的下一件事。