有时候在代码中看到Map或List类型的注入
这是spring的特殊用法,Spring 会将容器中所有类型符合 Map 的 value 对应的类型的 Bean 增加进来,用 Bean 的 id 或 name 作为 Map 的 key。
或者
@Autowried
private List<CheckStratedy> list;
当注入一个Map的时候 ,value泛型为CheckStrategy,则注入后Spring会将实例化后的bean放入value ,key则为注入后bean的名字
当注入一个List的时候,List的泛型为CheckStrategy,则注入后Spring会将实例化的bean放入List中
例如:
package com.service;
public interface CheckStrategy {
void check();
}
实现类:
package com.service.impl;
import com.service.CheckStrategy;
import org.springframework.stereotype.Component;
@Component
public class CheckValue implements CheckStrategy {
@Override
public void check() {
System.out.println("11111");
}
}
package com.service.impl;
import com.service.CheckStrategy;
import org.springframework.stereotype.Component;
@Component
public class CheckKey implements CheckStrategy{
@Override
public void check() {
System.out.println("222");
}
}
package com.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class Test {
@Autowired
private Map<String,CheckStrategy> checkStrategy;
@Autowired
private List<CheckStrategy> checkStrategyList;
public void sendMap(){
this.checkStrategy.get("checkValue").check(); // 11111
}
/**
Spring将bean放入了List中 那个这个顺序怎么控制呢
在实现类上加入@Order(value) 注解 ,值越小越先被放入List
**/
public void sendList(){
this.checkStrategyList.get(0).check(); // 1111
}
}
Spring将bean放入了List中 那个这个顺序怎么控制呢
在实现类上加入@Order(value) 注解 ,值越小越先被放入List