可以通过使用解析器配置对象(org.springframework.expression.spel.SpelParserConfiguration
)来配置 SpEL 表达式解析器。该配置对象控制一些表达式组件的行为。例如,如果你索引到一个数组或集合,而指定索引处的元素是空的,SpEL 可以自动创建该元素。当使用由一连串的属性引用组成的表达式时,这很有用。如果你索引到一个数组或列表,并且指定的索引超过了数组或列表当前大小的末端,SpEL 可以自动增长数组或列表以适应该索引。为了在指定的索引处添加一个元素,SpEL 将尝试使用元素类型的默认构造函数来创建该元素,然后再设置指定的值。如果元素类型没有默认构造函数,空值将被添加到数组或列表中。如果没有内置或自定义的转换器知道如何设置该值,null 将保留在数组或列表的指定索引处。下面的例子演示了如何自动增长列表:
package cn.mrcode.study.springdocsread.data;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.SpelParserConfiguration;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import java.util.List;
/**
* @author mrcode
*/
public class DemoTest {
public static void main(String[] args) {
// 开启:
// - 自动空引用初始化
// - 自动集合增长
SpelParserConfiguration config = new SpelParserConfiguration(true, true);
ExpressionParser parser = new SpelExpressionParser(config);
Expression expression = parser.parseExpression("list[3]");
Demo demo = new Demo();
Object o = expression.getValue(demo);
// demo.list 现在将是一个由 4 个条目组成的真实集合
}
static class Demo {
public List<String> list;
}
}