注入一个使用Spring扩展抽象类的类列表

时间:2016-03-30 20:09:59

标签: spring list inject

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的类列表。为什么呢?

由于

2 个答案:

答案 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;
    }
}