@autowired 注入多实例情况

67 阅读1分钟
//接口
public interface BaseService {

    void say(String str);

}
//A实现类
@Service
public class AService implements BaseService{
    @Override
    public void say(String str) {
        System.out.println("AService "+str);
    }
}

//B实现类
@Service
public class BService implements BaseService {
    @Override
    public void say(String str) {
        System.out.println("BService "+str);
    }
}

//测试controller
@RestController
@RequestMapping("/demo/test")
public class TestController {
    @Autowired
    private Map<String,BaseService> map;

    @Autowired
    private List<BaseService> list;

    @GetMapping("/")
    public void test(){
        System.out.println(map);
        System.out.println(list);
    }
}

先说注入的map,它是以注入进Spring容器的Bean名称作为key,类作为value,并且可以根据key获取需要的Bean实例, 而list,是实现了BaseService接口的且注入Spring容器的Bean的集合。

输出结果:

{AService=com.wojiushiwo.webdemo.mapAutoWired.AService@205b132e, BService=com.wojiushiwo.webdemo.mapAutoWired.BService@3cbcd8f3}


[ com.wojiushiwo.webdemo.mapAutoWired.AService@205b132e, com.wojiushiwo.webdemo.mapAutoWired.BService@3cbcd8f3]

如果对Bean手动设置了名称,那么map里的key就是设置的名称