區別 | @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='小明'}
}
-
JSR303數據校驗
若檢驗不一致會報錯,需要異常捕獲
-
複雜類型
使用list或map :https://blog.csdn.net/qq_39176597/article/details/103997482