HY,
我有下一个代码:
public abstract class MyClass{
protected abstract void method1();
}
扩展第一个的类:
@Component
public class MyClass1 extends MyClass{
.....
}
@Component
public class MyClass2 extends MyClass{
.....
}
我的类,我尝试注入扩展抽象类的类列表
@Component
public class SpringClass{
@Autowired **//It doesnt work, nothing is inyected!**
List<MyClass> classes
}
我的问题是它不起作用,它没有注入在属性类中扩展MyClass的类列表。为什么呢?
由于
答案 0 :(得分:0)
您可以删除实例变量的@Autowired注释并将其添加到setter方法。这样做之后,你的春课就是
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SpringClass {
List<MyClass> classes;
@Autowired
public void setClasses(List<MyClass> classes) {
this.classes = classes;
}
}
希望这有帮助。
答案 1 :(得分:0)
@Component
public class SpringClass {
@Autowired
private Map<String, YourInterface> map;
}
Map中的String将包含将YourInterface实现为String的所有类名称。 如果要获取所有实例,请使用map.values() 如果要获取特定实例,请按类名称获取。
此外,您可以通过其他识别(例如Enum)自定义密钥。 在这种情况下-您需要将其配置为@Bean 像下面这样:
@Configuration
public class CalculationHandlerConfig {
@Bean
public HashMap<OperatorTypeEnum, CalculatorService> CalculationHandlers(Map<String, CalculatorService> beansMap) {
HashMap<OperatorTypeEnum, CalculatorService> map = new HashMap<>();
for (CalculatorService bean : beansMap.values()) {
map.put(bean.getOperatorType(), bean);
}
return map;
}
}