Spring bean 裝配到map 或者 list

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 的邏輯判斷來處理不同的邏輯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章