1

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
    }
}

如果我删除@Asyncfrom asyncMethod,应用程序就会启动。如果我通过在构造函数上用@Service和注释来实例化 A @Autowired,应用程序就会启动。

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

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

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

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

我认为这@Async会导致代理出现一些奇怪的行为。我该如何处理?

4

0 回答 0