@ConfigurationProperties | @Value | |
---|---|---|
功能说明 | 批量注入配置文件中的属性值 | 单个指定注入属性值 |
松散绑定(语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂数据类型注入 | 支持 | 不支持 |
不管是yml还是properties他们都能获取到值
用法区分**
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,则使用@Value。
如果说,我们专门编写了一个JavaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties。
SpEL说明
SpEL(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言。 SpEL可以在运行时查询和操作数据,尤其是数组列表型数据,因此可以缩减代码量,优化代码结构。
1、用法一:@Value
@Value("#{表达式}") // 表达式可以为基本逻辑运算语法
public String valueOne;
@Value("${变量名}") // 变量名可以是配置文件属性值或者对象名称,并以此注入进来
public String valueTwo;
2、用法二:
<bean id="Person" class="com.java.xxxx">
<!-- 用法跟注解@ Value修饰形参类似 -->
<property name="name" value="#{表达式}" />
<property name="school" value="#{变量名}" />
</bean>
3、用法三:Expression
public class SpELTest {
public static void main(String[] args) {
// 创建ExpressionParser解析表达式
ExpressionParser parser = new SpelExpressionParser();
// 表达式放置
Expression exp = parser.parseExpression("表达式");
// 执行表达式,默认容器是spring本身的容器:ApplicationContext
Object value = exp.getValue();
System.out.Println(value);
/**如果使用其他的容器,则用下面的方法*/
// 创建一个虚拟的容器EvaluationContext
StandardEvaluationContext ctx = new StandardEvaluationContext();
// 向容器内添加bean
BeanA beanA = new BeanA();
ctx.setVariable("bean_id", beanA);
// setRootObject并非必须;一个EvaluationContext只能有一个RootObject,引用它的属性时,可以不加前缀
ctx.setRootObject(XXX);
// getValue有参数ctx,从新的容器中根据SpEL表达式获取所需的值
Object value = exp.getValue(ctx);
}
}
这里只说明了大致的用法,具体的还是需要百度做进一步的梳理
JSR303说明
JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。 | Bean Validation 中内置的constraint | | | :—-: | —- | | Constraint | 详细信息 | | @Null | 被注释的元素必须为null | | @NotNull | 被注释的元素必须不为null | | @AssertTrue | 被注释的元素必须为true | | @AssertFalse | 被注释的元素必须为false | | @Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | | @Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | | @DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | | @DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | | @Size(max, min) | 被注释的元素的大小必须在指定的范围内 | | @Digits(integer, fraction) | 被注释的元素必须是一个数字,其值必须字啊可接受的范围内 | | @Past | 被注释的元素必须是一个过去的日期 | | @Future | 被注释的元素必须是一个将来的日期 | | @pattern(value) | 被注释的元素必须符合正则表达式 | | Hibernate Validator 附加的constraint | | | @Email | 被注释的元素必须是电子邮箱地址 | | @Length(max, min) | 被注释的字符串长度大小必须在指定的范围内 | | @NotEmpty | 被注释的字符串必须是非空 | | @Range(max, min) | 被注释的元素的大小必须在指定的范围内 |