| @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本身的容器:ApplicationContextObject value = exp.getValue();System.out.Println(value);/**如果使用其他的容器,则用下面的方法*/// 创建一个虚拟的容器EvaluationContextStandardEvaluationContext ctx = new StandardEvaluationContext();// 向容器内添加beanBeanA 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) | 被注释的元素的大小必须在指定的范围内 |
