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
from asyncMethod
,应用程序就会启动。如果我通过在构造函数上用@Service
和注释来实例化 A @Autowired
,应用程序就会启动。
约束是我必须A
从一个单独的类实例化@Configuration
类。
我在应用程序上使用干净的代码架构,其中核心域中的类不使用任何弹簧注释。A
类是核心域的一部分。
我从外层将其中一些类实例化为 Spring Bean,因此我不会用特定于 spring 的注释“污染”它们。B
是外层的一部分,可以有Spring注解。
如果我在 class 的构造函数中放置一个断点B
,我可以看到它在我得到之前由 spring 实例化:NoSuchBeanDefinitionException
for it。
我认为这@Async
会导致代理出现一些奇怪的行为。我该如何处理?