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 的逻辑判断来处理不同的逻辑。

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