SpringBoot中@ConfigurationProperties和@Value的区别

    科技2022-07-11  112

    1、在SpringBoot中,可以使用@ConfigurationProperties注解结合配置文件给实体赋值,也可以使用@Value注解直接赋值

    @Component //@ConfigurationProperties(prefix = "student") public class Student { @Value("ww") private String name; @Value("23") private int age; ... // 不管注入的值时什么类型都写在双引号中

    且两种方法可以同时使用,@ConfigurationProperties注解的优先级高,会覆盖@Value的值。@ConfigurationProperties注解是一次注入全部,而@Value是单个注入

    2、@ConfigurationProperties注解支持松散语法,@Value不支持

    java实体类中的驼峰命名规则如 nickName,在yml中可以使用-代替如nick-name private String nickName; pet: nick-name: wc

    3、@Value支持SpEL表达式,@ConfigurationProperties不支持

    可以将yml文件中的某个属性值注入到该属性上 @Value("${pet.uname}") private String nickName; pet: uname: wc

    4、@ConfigurationProperties支持JSR303校验,@Value不支持

    @Component @ConfigurationProperties(prefix="student") @Validated // 开启jsr303校验 public class Student{ @Email private String email; } studnet: email: 1212@qq.com

    5、@ConfigurationProperties支持注入复杂类型,@Value不支持

    简单类型(8种基本数据类型/String/Date)@Value不支持注入复杂类型 @Value("{province: 湖北,city: 武汉, zone: 洪山}") private Map<String, Object> location;

    这种会直接报错

    Processed: 0.009, SQL: 8