@ConfigurationProperties与@Value的差异化使用

区别 @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • 松散语法:
标准方式 
person.firstName

方式一
	大写用- 
    person.first-name

方式二 
	大写用_ 
   person.first_name

三种方式,都可以使用 
	推荐,属性书写方式 
	PERSON_FIRST_NAME

  • SpEL((Spring Expression Language) 即Spring表达式语言
    • 语法 使用 #{} 注意与${}的区分
      • 字面量 赋值

        例如:
        @Value("#{4}") //整数
        @Value("#{‘xxxx’}") //字符串

      • 运算

        @Value("#{2+1}") 
        @Value("#{200+'年'}")//字符串拼接
          @Value("#{(10>3)?'真':'假'}")
        
      • bean赋值

           @Value("#{testConfig.name}")
        
package com.example.demo;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class SpelTest {
 //字符串
 @Value("#{'小猪'}")
 private String name1;

 //简单运算
 @Value("#{1+1}")
 private int num;

 //调用静态方法或静态属性
 @Value("#{T(java.lang.Math).PI}")
 private Float num1;
 
 //条件运算符
 @Value("#{(10>3)?'真':'假'}")
 private String name3;

 @Autowired
 private TestConfig testConfig;

 //使用Bean属性
 @Value("#{testConfig.name}")
 private String name4;

 @Override
 public String toString() {
     return "SpelTest{" +
             "name1='" + name1 + '\'' +
             ", num=" + num +
             ", num1=" + num1 +
             ", name3='" + name3 + '\'' +
             ",name4='" + name4 + '\'' +
             '}';
 }
}

test:

@Autowired
    private SpelTest spelTest;
    @Test
    public void test9(){
        System.out.println(spelTest.toString());
//SpelTest{name1='小猪', num=2, num1=3.1415927, name3='真',name4='小明'}
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章