• 管理
  • springboot @value和@configurationproperties注解的区别

     

      @ConfigurationProperties @value
    功能 批量注入配置文件中的属性 一个个指定
    松散绑定(松散语法) 支持 不支持
    SpEL 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型封装 支持 不支持

     

     

    所谓松散语法也就是属性命名规则(Relaxed binding)

    - person.firstName:使用标准方式
    - person.first-name:大写用-         
    - person.first_name:大写用_
    - PERSON_FIRST_NAME: 系统属性推荐使用这种写法

    @ConfigurationProperties支持松散语法         @Value不支持松散语法

    application.properties文件中有字段 persion.first-name

    @Component
    @ConfigurationProperties(prefix = "person") public class Person { private String firstName;
    }

     

    JSR303数据校验(@Validation)

    @ConfigurationProperties @Validated 支持      @Value不支持

    import javax.validation.constraints.NotNull;
    
    import org.hibernate.validator.constraints.Email;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.validation.annotation.Validated;
    
    @ConfigurationProperties
    @Validated
    public class Properties {
    
        @NotNull
        private String userName;
        
        @Email
        private String email;
        
    }

     

    SpEl

    @ConfigurationProperties不支持EL表达式

    application.properties文件中有字段 person.userAge=12 

    userAge = 12   //可以
    userAge = #{2*6}  //EL表达式不支持

     

    @Value支持EL表达式

    @Value(userAge=#{2*6}) //支持EL表达式
    

     

    使用原则:在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;如果专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

     

    posted @ 2018-05-27 22:56  斑马森林  阅读(15229)  评论(0)    收藏  举报