SpringBoot 实体类注入匹配值

  1. 创建实体类

    @Component	//注册bean到容器中
    @Data
    public class Dog {
        private String name;
        private int age;
        private String monster;
    }
    
  2. 注入属性

    1. 使用value注入

      @Component	//注册bean到容器中
      @Data
      public class Dog {
          @Value("阿黄")
          private String name;
          @Value("18")
          private int age;
          private String monster;
      }
      
    2. 使用yaml (yml) 注入推荐

      dog:
        name: 旺财
        age: 12
      
      @Component
      @Data
      @ConfigurationProperties(prefix = "dog")  //将yml文件中的dog注入到对象中
      public class Dog {
          private String name;
          private int age;
          private String monster;
      }
      
    3. 更复杂的yml注入

      person:
        name: laoyao
        age: 18
        happy: false
        birth: 1900/1/1
        maps:
          k1: v1
          k2: v2
      # 也可以使用  maps: {k1=v1, k2=v2}
        lists:
          - code
          - game
          - girl
        dog:
          name: 旺财
          age: 12
      
      @Component
      @Data
      @ConfigurationProperties(prefix = "person")
      public class Person {
          private String name;
          private Integer age;
          private Boolean happy;
          private Date birth;
          private Map<String,Object> maps;
          private List<Object> lists;
          private Dog dog;
      }
      
    4. 使用properties注入

      person.properties:

      name=laoyao
      
      @PropertySource(value = "classpath:person.properties")
      @Component //注册bean
      public class Person {
      
          @Value("${name}")
          private String name;
      
          ......  
      }
      
    5. 对比小结

      @Value这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;我们来看个功能对比图

      图片

      1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

      2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下

      3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

      4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

posted @ 2022-08-04 16:37  z-laoyao  阅读(113)  评论(0编辑  收藏  举报