如果我在使用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
导致代理上出现一些奇怪的行为。我该如何处理?