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