Spring如何知道在通用列表中注入什么?

时间:2018-05-31 09:26:45

标签: spring

鉴于代码片段

@Service

public class MapUnitsService {
    @Autowired  
    private List<UnitMapping> unitMappings;
...

Spring是如何知道注入unitMappings的内容,因为类型信息在运行时消失了?

3 个答案:

答案 0 :(得分:1)

比预期更容易,因为反射提供了所需的信息:

public class Main {

    List<String> test = new ArrayList<>();

     public static void main(String[] args) throws IOException,   NoSuchFieldException {

            Field field = Main.class.getDeclaredField("test");

            System.out.println(field.getGenericType().getTypeName());
        }

}

答案 1 :(得分:0)

基本上spring会在该类型的应用程序上下文中注入所有bean。

答案 2 :(得分:0)

你必须定义bean:

@Bean
List<UnitMapping> unitMappings(){
    return new UnitMapping(); 
} 

Spring 4.0将自动注入泛型作为@Qualifier的一种形式,如下所示:

    @Autowired  
    private List<UnitMapping> unitMappings;

负责通用注入的类是ResolvableType

Spring Framework 4.0 and Java Generics