区别 | @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