我在自动装配bean时出现问题,这些bean是从带注释的接口派生的。
@Component
@EnableAsync
public interface Calculator {
@Async
public Future<String> calculate();
}
public interface SpecificCalculator extends Calculator {
}
public class ConcreteSpecificCalculator implements SpecificCalculator {
@Override
public Future<String> calculate() {
// do calculation here
return new AsyncResult<String>("hello");
}
}
根据我的理解:Annotations on Interfaces? @Component Annotation也应该适用于所有子类。现在我有一个Mapper类返回从SpecificCalculator派生的所有类型。
@Component
public class CalculatorMapper {
@Autowired
private List<SpecificCalculator> specificCalculators;
public List<Calculator> retrieveCalculatorsByModuleId(Integer moduleId) {
if(moduleId==...){
return specificCalculators;
}else{
...
}
}
这不起作用。 Spring没有找到ConcreteSpecificCalculator并且没有注入它。如果我再次使用@Component注释ConcreteSpecificCalculator,它正在工作。任何人都可以向我解释一下吗?