可以通过使用解析器配置对象(org.springframework.expression.spel.SpelParserConfiguration)来配置 SpEL 表达式解析器。该配置对象控制一些表达式组件的行为。例如,如果你索引到一个数组或集合,而指定索引处的元素是空的,SpEL 可以自动创建该元素。当使用由一连串的属性引用组成的表达式时,这很有用。如果你索引到一个数组或列表,并且指定的索引超过了数组或列表当前大小的末端,SpEL 可以自动增长数组或列表以适应该索引。为了在指定的索引处添加一个元素,SpEL 将尝试使用元素类型的默认构造函数来创建该元素,然后再设置指定的值。如果元素类型没有默认构造函数,空值将被添加到数组或列表中。如果没有内置或自定义的转换器知道如何设置该值,null 将保留在数组或列表的指定索引处。下面的例子演示了如何自动增长列表:

    1. package cn.mrcode.study.springdocsread.data;
    2. import org.springframework.expression.Expression;
    3. import org.springframework.expression.ExpressionParser;
    4. import org.springframework.expression.spel.SpelParserConfiguration;
    5. import org.springframework.expression.spel.standard.SpelExpressionParser;
    6. import java.util.List;
    7. /**
    8. * @author mrcode
    9. */
    10. public class DemoTest {
    11. public static void main(String[] args) {
    12. // 开启:
    13. // - 自动空引用初始化
    14. // - 自动集合增长
    15. SpelParserConfiguration config = new SpelParserConfiguration(true, true);
    16. ExpressionParser parser = new SpelExpressionParser(config);
    17. Expression expression = parser.parseExpression("list[3]");
    18. Demo demo = new Demo();
    19. Object o = expression.getValue(demo);
    20. // demo.list 现在将是一个由 4 个条目组成的真实集合
    21. }
    22. static class Demo {
    23. public List<String> list;
    24. }
    25. }

    image.png