当从@Configuration创建的bean实例化invoker bean时,Spring-Boot @Async会导致NoSuchBeanDefinitionException

时间:2017-04-28 13:40:57

标签: spring asynchronous spring-bean clean-architecture

如果我在使用NoSuchBeanDefinitionException注释的类中的方法上添加@Async,我将获得@Service,如果该类在另一个使用@Bean实例化的bean中使用@Configuration上课。

下面我简要描述了一个例子:

@Configuration
@EnableAsync
public class Configuration() {

    @Bean
    public A a(C c) {
        return new A(c);
    }
}

public interface B {
    public void asyncMethod();
}

public class A {

    private B b;

    public A (B b) {
        this.b = b;
    }

    public void someMethod() {
        b.asyncMethod();
    }
}

@Service
public class C implements B{

    @Async
    @Overrides
    public void asyncMethod() {
        // to stuff
    }
}

如果我从@Async删除asyncMethod,则应用程序启动。 如果我通过在构造函数上使用@Service@Autowired对其进行注释来实例化A,则应用程序将启动。

约束是我必须从单独的A类中实例化类@Configuration

我在应用程序上使用干净的代码架构,其中核心域中的类不使用任何弹簧注释。 A类是核心域的一部分。

我将这些类中的一些从外层实例化为Spring Beans,因此我不会使用特定于spring的注释来“污染”它们。 B是外层的一部分,可以有Spring注释。

如果我在类B的构造函数中放置一个断点,我可以看到它在我得到之前由spring实例化:NoSuchBeanDefinitionException

我假设@Async导致代理上出现一些奇怪的行为。我该如何处理?

0 个答案:

没有答案