Spring 提供同類型bean 自動裝配到 map 或者 list 等集合中,超級好用,結合一些方式可以減少 if else 的業務邏輯判斷以及處理。
上demo:
測試用的組件如下:(用Color ,省事也方便理解)
public interface Color {
void show();
}
@Component
public class Red implements Color {
@Override
public void show() {
System.out.println("this is RED");
}
@Override
public String toString() {
return "Red{}";
}
}
@Component
public class Green implements Color {
@Override
public void show() {
System.out.println("this is Green");
}
@Override
public String toString() {
return "Green{}";
}
}
@Component
public class Blue implements Color {
@Override
public void show() {
System.out.println("this is Blue");
}
@Override
public String toString() {
return "Blue{}";
}
}
bean的config類:
@Configuration
@ComponentScan(value = "com.wk.improve.spring.annotation")
public class ColorConfig {
}
測試類
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ColorConfig.class)
public class TestColor {
@Autowired
private Map<String, Color> colorMap;
@Autowired
private List<Color> colorList;
@Test
public void testColor() {
if (colorMap != null) {
for (Map.Entry<String, Color> entry : colorMap.entrySet()) {
System.out.println(entry.getKey());
entry.getValue().show();
}
System.out.println("--------map----------");
}
if (colorList != null) {
colorList.stream().forEach(color->color.show());
System.out.println("--------list----------");
}
}
}
輸出的結果:
結果可以看到, 在bean裝配到 map 或者list 中的時候, 一定是該類型的bean
@Autowired
private Map<String, Color> colorMap;
@Autowired
private List<Color> colorList;
使用 @Autowired 註解進行裝配, map 中 key 是組件的id (默認情況下, @Component 使用類名第一個字母小寫作爲bean 的id註冊到容器中)
這種方式方便同類型的service,處理不同的業務邏輯方式使用, 避免了各種if else 的邏輯判斷來處理不同的邏輯。