同一接口
public interface SayService {
public String hello();
}
接口的不同实现
@Service("sayOne")
public class SayServiceOne implements SayService {
@Override
public String hello() {
System.out.println("say one");
return "say one";
}
}
@Service("sayTwo")
public class SayServiceTwo implements SayService {
@Override
public String hello() {
System.out.println("say two");
return "say two";
}
}
装载到map,作为bean注入到spring中
@Component
public class MapConfig {
@Bean(name="actServiceMap")
public Map<String, SayService> getQueryServiceMap(){
return new HashMap<>();
}
}
或者自定义key
@Component
public class MapConfig {
@Resource(name = "sayOne")
private SayService sayOne;
@Autowired
@Qualifier("sayTwo")
private SayService sayTwo;
@Bean("sayServiceMap")
public Map<String, SayService> geneSayServiceMap(){
Map<String, SayService> sayServiceMap = new HashMap<>();
sayServiceMap.put("sayOne自定义", sayOne);
sayServiceMap.put("sayTwo自定义", sayTwo);
return sayServiceMap;
}
}
或者这样写也可
@Component
public class ActMap {
@Bean(name="actServiceMap")
public Map<String, ActService> geneActServiceMap(@Qualifier("actOne") ActService actOne,
@Qualifier("actTwo") ActService actTwo){
Map<String, ActService> map = new HashMap<>();
map.put("actOne111", actOne);
map.put("actTwo2222", actTwo);
return map;
}
}
测试
@RestController
@RequestMapping("/beanTest")
public class BeanTest {
@Resource(name="sayServiceMap")
Map<String, SayService> sayServiceMap;
@GetMapping("/say")
public String say(){
SayService sayOne = sayServiceMap.get("sayOne");
SayService sayTwo = sayServiceMap.get("sayTwo");
return sayOne.hello() + "\n" + sayTwo.hello();
}
}