@ConfigurationProperties @Value
功能说明 批量注入配置文件中的属性值 单个指定注入属性值
松散绑定(语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂数据类型注入 支持 不支持

不管是yml还是properties他们都能获取到值


用法区分**
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,则使用@Value。
如果说,我们专门编写了一个JavaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties。

SpEL说明

SpEL(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言。 SpEL可以在运行时查询和操作数据,尤其是数组列表型数据,因此可以缩减代码量,优化代码结构。

1、用法一:@Value

  1. @Value("#{表达式}") // 表达式可以为基本逻辑运算语法
  2. public String valueOne;
  3. @Value("${变量名}") // 变量名可以是配置文件属性值或者对象名称,并以此注入进来
  4. public String valueTwo;

2、用法二:配置

  1. <bean id="Person" class="com.java.xxxx">
  2. <!-- 用法跟注解@ Value修饰形参类似 -->
  3. <property name="name" value="#{表达式}" />
  4. <property name="school" value="#{变量名}" />
  5. </bean>

3、用法三:Expression

  1. public class SpELTest {
  2. public static void main(String[] args) {
  3. // 创建ExpressionParser解析表达式
  4. ExpressionParser parser = new SpelExpressionParser();
  5. // 表达式放置
  6. Expression exp = parser.parseExpression("表达式");
  7. // 执行表达式,默认容器是spring本身的容器:ApplicationContext
  8. Object value = exp.getValue();
  9. System.out.Println(value);
  10. /**如果使用其他的容器,则用下面的方法*/
  11. // 创建一个虚拟的容器EvaluationContext
  12. StandardEvaluationContext ctx = new StandardEvaluationContext();
  13. // 向容器内添加bean
  14. BeanA beanA = new BeanA();
  15. ctx.setVariable("bean_id", beanA);
  16. // setRootObject并非必须;一个EvaluationContext只能有一个RootObject,引用它的属性时,可以不加前缀
  17. ctx.setRootObject(XXX);
  18. // getValue有参数ctx,从新的容器中根据SpEL表达式获取所需的值
  19. Object value = exp.getValue(ctx);
  20. }
  21. }

这里只说明了大致的用法,具体的还是需要百度做进一步的梳理

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) | 被注释的元素的大小必须在指定的范围内 |