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 Listvalue1;

    //注入固定值
    @Value("${value:1,2,3}")
    private Listvalue2;

2、注入配置文件的值

    @Value("${value}")
    private Listvalue3;

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

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

    @Value("${users}")
    private List 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 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

喜欢的话,点赞。回见

你可能感兴趣的:(Value,Configuration,Properties,spring,java)