用Spring命名@Asyn注释

时间:2017-06-06 08:20:09

标签: java spring spring-mvc

我正在尝试使用spring提供的@Async注释。通过我发现的一些博客,使用它有以下限制:

  1. 必须仅适用于公共方法
  2. 自我调用 - 从同一个类中调用异步方法 - 将无法正常工作
  3. 我有一个方法,它从我要标记@Async的同一个类调用。有没有办法从同一个班级实现它?

1 个答案:

答案 0 :(得分:1)

在Spring v4.3 +中,您可以使用自注射,并在自注入参考上调用该方法。

例如:

@Component
public class SomeClass {
    @Autowired
    private SomeClass selfInjected;

    public void someMethod() {
       selfInjected.someOtherMethod();
    }

    @Async 
    public void someOtherMethod(){
      ...;
    }
}

更新为OP使用的是4.3之前的版本:

这对你有用。

@Component
public class SomeClass {

    @Autowired
    private ApplicationContext applicationContext;

    private SomeClass selfInjected;

    @PostConstruct
    private void init() {
        selfInjected = applicationContext.getBean(SomeClass.class);
    }
}

另一种选择是提取方法以分离类并自动装配它。在进行上述方法之前,我会亲自探讨这个选项。