SpringBoot 实体类注入匹配值
-
创建实体类
@Component //注册bean到容器中 @Data public class Dog { private String name; private int age; private String monster; }
-
注入属性
-
使用value注入
@Component //注册bean到容器中 @Data public class Dog { @Value("阿黄") private String name; @Value("18") private int age; private String monster; }
-
使用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; }
-
更复杂的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; }
-
使用properties注入
person.properties:
name=laoyao
@PropertySource(value = "classpath:person.properties") @Component //注册bean public class Person { @Value("${name}") private String name; ...... }
-
对比小结
@Value这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;我们来看个功能对比图
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
-