Spring @Value@Configuration注入map、List、Bean,注入失败看这篇就够了

先说一下注入的Spring环境。

1、@Value注解不需要 set方法

2、@ConfigurationProperties 需要set方法要不然注入不进来(特别说明一下)

@EnableConfigurationProperties注解的作用是:使 @ConfigurationProperties 注解的类生效(如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component或@Configuration,那么容器中是获取不到properties 配置文件转化的bean。 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入)

一、注入List或[ ]数组

1、注入固定值

     //注入固定值
    @Value("${value:1,2,3}")
    private List<String>value1;

    //注入固定值
    @Value("${value:1,2,3}")
    private List<String>value2;

2、注入配置文件的值

    @Value("${value}")
    private List<String>value3;

    //下面为配置文件的内容
    写法一:
        value: 1,2,3
    写法二(这种写法对有复杂参数时很方便:推荐):
        value:
          - 1
          - 2
          - 3

3、注入配置文件中的List参数

    @Value("${users}")
    private List<User> value4;

    配置文件写法为:
    
    value:
      - 0:
          username: 张三
          password: xxx
      - 1:
          username: 李四
          password: xxx

4、表达式注入

@Value("#{'${username:张三|李四|王五}'.split('|')}")

5、注入默认值

      //注入默认值:
    // 如果配置文件的connectionTimeOut有值直接使用,如果没有值,则使用默认值:3000
    @Value("${connectionTimeOut:3000}")
    private Integer connectionTimeOut;

二、通过上面的规律,聪明的你可以使用强大的Spring很容易就注入其他类型

如Map、Set

       


@Value("${users}")
private Map<User> value5;

以下为配置文件内容写法一:(推荐)

users:
  张三:
    username: 张三
    password: xxx
  李四:
    username: 李四
    password: xxx

写法二:
users:{张三:{username:张三,password:xxx},李四:{username:张三,password:xxx}}

上以注入的结果是会得到一个map:{张三:{username:张三,password:xxx},李四:{username:张三,password:xxx}}
(是不是很强大)

三:注入Bean

    @Value(value = "#{user}")
    private User value6;

四:简易写法:

1、使用@ConfigurationProperties        

@Configuration
@ConfigurationProperties(prefix = "utils.param")
public class ContextConfig {

    private Integer timeOut;
}

可以自动匹配配置文件中的同名参数:如

utils:
  param: #以下两种写法都以自动匹配到上面的参数中。YYDS
    time-out:3000 
    timeOut: 3000

喜欢的话,点赞。回见

  • 1
    点赞
  • 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、付费专栏及课程。

余额充值