为什么@Async注释导致循环引用问题?

时间:2016-04-05 12:43:02

标签: spring asynchronous autowired

这是我的豆子:

@Service
public class MyService{

   @Autowire
   private OtherService service;

   @Async
   public jobAync(){
      job();
   }
   public job(){
      ...
   }
}

我无法理解为什么@Async注释到jobAync导致Spring的循环引用问题,如果我删除该注释一切正常...我希望在autowires中发现问题但似乎与@Async相关联。

2 个答案:

答案 0 :(得分:1)

您好,这就是@async引起循环引用错误的原因:

AsyncConfigurer配置类在应用程序上下文引导中提前初始化。如果您在那里需要对其他bean的任何依赖,请确保尽可能将它们声明为“惰性”,以使它们也可以通过其他后处理器。

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html

您可以在其他bean的注入点中添加@lazy。

答案 1 :(得分:0)

我不知道这是否是最佳解决方案,但我解决了两种不同的服务,主服务和异步服务:

@Service
public class MyService{

   @Autowire
   private OtherService service;

   public job(){
      ...
   }
}

@Service
public class MyServiceAsync{

   @Autowire
   private MyService myService;

   @Async
   public job(){
      myService.job();
   }
}