Spring Expression Language — это язык выражений, который поддерживает манипулирование графом объектов и запросы к нему во время выполнения. Граф объектов — это своего рода структура или абстракция, содержащая сложную сеть взаимосвязанных объектов. Объекты могут содержать другие объекты, быть связаны друг с другом или содержать ссылку на другой объект. Думайте об этом как о состоянии приложения в определенный момент времени. SpEL имеет множество функций, таких как литеральные выражения, регулярные выражения, вызов методов, вызов конструкторов или встроенных списков и карт. Полный список можно найти в документах.
Давайте сначала рассмотрим несколько основных примеров с логическими и арифметическими операциями:
@Value("#{(2 * 5 + 5 - 3) / 4}") private int arithmeticOperationsResult; // 3 @Value("#{2 gt 1}") private boolean greaterThan; // true @Value("#{3 lt 1}") private boolean lessThan; // false @Value("#{2 != 2}") private boolean notEqual; // false @Value("#{2 >= 2}") private boolean greaterThanOrEqual; // true @Value("#{3 > 2 && 2 > 1}") private boolean logicalAnd; // true @Value("#{false || true}") private boolean logicalOr; // true @Value("#{1 == 1 ? 'that is true' : 'that is false'}") private String ternaryOperation; // that is true
Можно использовать значения из файла свойств. Имея
someStringArray={"cat", "dog", "cow"} someStringIntegerMap={first: 1, second: 2, third: 3}
ты можешь сделать
@Value("#{${someStringArray}[0]}") private String stringArrayFirstElement; // cat @Value("#{${someStringIntegerMap}['first']}") private int stringIntegerMapFirstElement; // 1
Также возможно получение значений из методов. Предполагая следующий bean
@Component("methodBean") public class MethodBean { public String getValue() { return "some value"; } }
ты можешь сделать
@Value("#{methodBean.getValue()}") private String methodValue; // some value
Наконец, вы можете использовать ExpressionParser
public int runSpelExpressionParser() { ExpressionParser expressionParser = new SpelExpressionParser(); Expression expression = expressionParser.parseExpression("'someVeryLengthyString'.concat('extraString').length()"); return (int) expression.getValue(); } runSpelExpressionParser(); // 32