This version is still in development and is not considered stable yet. For the latest stable version, please use Spring Framework 6.2.1!

Spring Expression Language (SpEL)

The Spring Expression Language ("SpEL" for short) is a powerful expression language that supports querying and manipulating an object graph at runtime. The language syntax is similar to the Jakarta Expression Language but offers additional features, most notably method invocation and basic string templating functionality.

While there are several other Java expression languages available — OGNL, MVEL, and JBoss EL, to name a few — the Spring Expression Language was created to provide the Spring community with a single well supported expression language that can be used across all the products in the Spring portfolio. Its language features are driven by the requirements of the projects in the Spring portfolio, including tooling requirements for code completion support within the Spring Tools for Eclipse. That said, SpEL is based on a technology-agnostic API that lets other expression language implementations be integrated, should the need arise.

While SpEL serves as the foundation for expression evaluation within the Spring portfolio, it is not directly tied to Spring and can be used independently. To be self contained, many of the examples in this chapter use SpEL as if it were an independent expression language. This requires creating a few bootstrapping infrastructure classes, such as the parser. Most Spring users need not deal with this infrastructure and can, instead, author only expression strings for evaluation. An example of this typical use is the integration of SpEL into creating XML or annotation-based bean definitions, as shown in Expression support for defining bean definitions.

This chapter covers the features of the expression language, its API, and its language syntax. In several places, Inventor and Society classes are used as the target objects for expression evaluation. These class declarations and the data used to populate them are listed at the end of the chapter.

The expression language supports the following functionality:

  • Literal expressions

  • Accessing properties, arrays, lists, and maps

  • Inline lists

  • Inline maps

  • Array construction

  • Relational operators

  • Regular expressions

  • Logical operators

  • String operators

  • Mathematical operators

  • Assignment

  • Type expressions

  • Method invocation

  • Constructor invocation

  • Variables

  • User-defined functions

  • Bean references

  • Ternary, Elvis, and safe-navigation operators

  • Collection projection

  • Collection selection

  • Templated expressions