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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring properties自动装配可以方便地将Map<String, List>类型的属性注入到Spring容器Bean。在Spring,可以使用@ConfigurationProperties注解来进行自动装配。 首先,我们需要在配置类使用@ConfigurationProperties注解,并指定prefix属性为属性的前缀。假设我们的属性前缀是"my",那么配置类的代码如下: ```java @Configuration @ConfigurationProperties(prefix = "my") public class MyConfig { private Map<String, List<String>> myMap; public Map<String, List<String>> getMyMap() { return myMap; } public void setMyMap(Map<String, List<String>> myMap) { this.myMap = myMap; } } ``` 接下来,在配置文件,我们可以使用以下方式将属性注入到配置类: ```properties my.myMap.key1=value1,value2,value3 my.myMap.key2=value4,value5 ``` 通过以上配置,Spring会将属性值自动注入到MyConfig类的myMap属性,并将属性key1对应的值作为List<String>类型的value1、value2、value3注入到Map,将key2对应的值作为List<String>类型的value4、value5注入到Map。 我们可以在其他需要使用这些属性的Bean,将MyConfig类作为依赖注入进来,并通过调用getMyMap()方法来获取属性值。例如: ```java @Service public class MyService { private Map<String, List<String>> myMap; public MyService(MyConfig myConfig) { this.myMap = myConfig.getMyMap(); } // 其他业务逻辑方法 } ``` 通过以上方式,我们可以方便地在Spring实现Map<String, List>类型的属性自动装配。这样的方式可以减少硬编码,并且灵活性较高,便于维护和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值