@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='小明'}
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章