今天寫一個有意思的東西,spring的特殊注入(List糠雨,Map)
之前在整理觀察者模式和中介者模式的時候,都需要有一個集合容器來放入我們的被執(zhí)行的對象(前文請參考:觀察者,中介者)
有時候不同邏輯需要的集合里面元素不一樣徘跪,有時候會引出線程安全問題(可以用多例來保證線程安全)甘邀。
看看今天需要學(xué)習(xí)的內(nèi)容,首先定義一個接口和三個實現(xiàn)類:
一個接口和三個實現(xiàn)類
需要把這幾個實現(xiàn)類放入集合中垮庐,方便我們調(diào)用
通常做法:
@Resource(name = "aDemoService")
private DemoService aDemoService;
@Resource(name = "bDemoService")
private DemoService bDemoService;
@Resource(name = "cDemoService")
private DemoService cDemoService;
@Test
void test(){
List<DemoService> demoServices = new ArrayList<DemoService>();
demoServices.add(aDemoService);
demoServices.add(bDemoService);
demoServices.add(cDemoService);
demoServices.stream()
.forEach((a) -> {
System.out.println(a);
});
}
輸出結(jié)果:
com.example.specialinjection.service.ADemoService@5f404594
com.example.specialinjection.service.BDemoService@53692008
com.example.specialinjection.service.CDemoService@7b2a3ff8
今天有個更加簡單的注入方式松邪,直接注入容器類(List,Map)哨查,來滿足我們的需求
no bi bi,show code:
@Autowired
private List<DemoService> demoServiceList;
@Autowired
private Map<String, DemoService> demoServiceMap;
@Test
void contextLoads() {
demoServiceList.stream()
.forEach((a) -> {
System.out.println(a);
});
System.out.println("_______________________________________________");
demoServiceMap.entrySet().stream()
.forEach((a) -> {
System.out.println(a.getKey());
System.out.println(a.getValue());
});
}
結(jié)果:
com.example.specialinjection.service.ADemoService@5b3bb1f7
com.example.specialinjection.service.BDemoService@58d6b7b9
com.example.specialinjection.service.CDemoService@3f1a4795
_______________________________________________
aDemoService
com.example.specialinjection.service.ADemoService@5b3bb1f7
bDemoService
com.example.specialinjection.service.BDemoService@58d6b7b9
cDemoService
com.example.specialinjection.service.CDemoService@3f1a4795
是不是很簡單
-如果注入list集合逗抑,則元素是該list泛型的所有實現(xiàn)類(這里的list元素順序,我們可以在springbean上加上@Order控制順序)
-如果注入map集合寒亥,則元素key為springbean的名稱邮府,值為該map值泛型的所有實現(xiàn)類