前言
這種用法是在看別人代碼的時候學到的,覺得挺有意思的,記錄一下。
具體用法
首先新建一個接口
public interface PlService {
}
新建兩個這個接口的實現類
@Service
public class AService implements PlService {
public AService() {
System.out.println("----------------------- AService 實例化 ------------------------");
}
}
@Service
public class BService implements PlService {
public BService() {
System.out.println("------------------------------- BServive 實例化 ------------------------");
}
}
在另一個類中注入集合
我是在一個啟動的runner中注入的:
@Component
@Slf4j
public class PlEurekaServerRunner implements ApplicationRunner {
@Autowired
private List<PlService> services;
@Autowired
private Map<String, PlService> serviceMap;
@Override
public void run(ApplicationArguments args) throws Exception {
for (PlService service : services) {
log.info("++++++++++++++++++++ {}+++++++++++++++++++ ", service.getClass().getName());
}
for (Map.Entry<String, PlService> entry : serviceMap.entrySet()) {
log.info("======================= {} : {} ====================", entry.getKey(), entry.getValue());
}
}
}
注入的結果
如果是List的話,會注入該接口的所有實現類;如果是Map的話,key為類名,value為實現類。