Language Reference Spring Expression Language SpEL
10.5 Language Reference
Literal expressions The types of literal expressions supported are strings, numeric values int, real, hex, boolean and null. Strings are delimited by single quotes. To put a single quote itself in a string, use two single quote characters. The following listing shows simple usage of literals. Typically they would not be used in isolation like this but rather as part of a more complex expression, for example using a literal on one side of a logical comparison operator. ExpressionParser parser = new SpelExpressionParser; evals to Hello World String helloWorld = String parser.parseExpression Hello World .getValue; double avogadrosNumber = Double parser.parseExpression 6.0221415E+23 .getValue; evals to 2147483647 int maxValue = Integer parser.parseExpression 0x7FFFFFFF .getValue; boolean trueValue = Boolean parser.parseExpression true .getValue; Object nullValue = parser.parseExpression null .getValue; Numbers support the use of the negative sign, exponential notation, and decimal points. By default real numbers are parsed using Double.parseDouble. Properties, Arrays, Lists, Maps, Indexers Navigating with property references is easy: just use a period to indicate a nested property value. The instances of the Inventor class, pupin, and tesla, were populated with data listed in the section Classes used in the examples . To navigate down and get Tesla’s year of birth and Pupin’s city of birth the following expressions are used. evals to 1856 int year = Integer parser.parseExpression Birthdate.Year + 1900 .getValuecontext; String city = String parser.parseExpression placeOfBirth.City .getValuecontext; Case insensitivity is allowed for the first letter of property names. The contents of arrays and lists are obtained using square bracket notation. 4.3.9.RELEASE Spring Framework 203 ExpressionParser parser = new SpelExpressionParser; Inventions Array StandardEvaluationContext teslaContext = new StandardEvaluationContexttesla; evaluates to Induction motor String invention = parser.parseExpression inventions[3] .getValue teslaContext, String. class ; Members List StandardEvaluationContext societyContext = new StandardEvaluationContextieee; evaluates to Nikola Tesla String name = parser.parseExpression Members[0].Name .getValue societyContext, String. class ; List and Array navigation evaluates to Wireless communication String invention = parser.parseExpression Members[0].Inventions[6] .getValue societyContext, String. class ; The contents of maps are obtained by specifying the literal key value within the brackets. In this case, because keys for the Officers map are strings, we can specify string literals. Officers Dictionary Inventor pupin = parser.parseExpression Officers[president] .getValue societyContext, Inventor. class ; evaluates to Idvor String city = parser.parseExpression Officers[president].PlaceOfBirth.City .getValue societyContext, String. class ; setting values parser.parseExpression Officers[advisors][0].PlaceOfBirth.Country .setValue societyContext, Croatia ; Inline lists Lists can be expressed directly in an expression using {} notation. evaluates to a Java list containing the four numbers List numbers = List parser.parseExpression {1,2,3,4} .getValuecontext; List listOfLists = List parser.parseExpression {{a,b},{x,y}} .getValuecontext; {} by itself means an empty list. For performance reasons, if the list is itself entirely composed of fixed literals then a constant list is created to represent the expression, rather than building a new list on each evaluation. Inline Maps Maps can also be expressed directly in an expression using {key:value} notation. evaluates to a Java map containing the two entries Map inventorInfo = Map parser.parseExpression {name:Nikola,dob:10-July-1856} .getValuecontext; Map mapOfMaps = Map parser.parseExpression {name:{first:Nikola,last:Tesla},dob: {day:10,month:July,year:1856}} .getValuecontext; {:} by itself means an empty map. For performance reasons, if the map is itself composed of fixed literals or other nested constant structures lists or maps then a constant map is created to represent the expression, rather than building a new map on each evaluation. Quoting of the map keys is optional, the examples above are not using quoted keys. 4.3.9.RELEASE Spring Framework 204 Array construction Arrays can be built using the familiar Java syntax, optionally supplying an initializer to have the array populated at construction time. int [] numbers1 = int [] parser.parseExpression new int[4] .getValuecontext; Array with initializer int [] numbers2 = int [] parser.parseExpression new int[]{1,2,3} .getValuecontext; Multi dimensional array int [][] numbers3 = int [][] parser.parseExpression new int[4][5] .getValuecontext; It is not currently allowed to supply an initializer when constructing a multi-dimensional array. Methods Methods are invoked using typical Java programming syntax. You may also invoke methods on literals. Varargs are also supported. string literal, evaluates to bc String c = parser.parseExpression abc.substring2, 3 .getValueString. class ; evaluates to true boolean isMember = parser.parseExpression isMemberMihajlo Pupin .getValue societyContext, Boolean. class ; Operators Relational operators The relational operators; equal, not equal, less than, less than or equal, greater than, and greater than or equal are supported using standard operator notation. evaluates to true boolean trueValue = parser.parseExpression 2 == 2 .getValueBoolean. class ; evaluates to false boolean falseValue = parser.parseExpression 2 -5.0 .getValueBoolean. class ; evaluates to true boolean trueValue = parser.parseExpression black block .getValueBoolean. class ; Note Greaterless-than comparisons against null follow a simple rule: null is treated as nothing here i.e. NOT as zero. As a consequence, any other value is always greater than null X null is always true and no other value is ever less than nothing X null is always false . If you prefer numeric comparisons instead, please avoid number-based null comparisons in favor of comparisons against zero e.g. X 0 or X 0 . In addition to standard relational operators SpEL supports the instanceof and regular expression based matches operator. 4.3.9.RELEASE Spring Framework 205 evaluates to false boolean falseValue = parser.parseExpression xyz instanceof TInteger .getValueBoolean. class ; evaluates to true boolean trueValue = parser.parseExpression 5.00 matches \-?\\d+\\.\\d{2}? .getValueBoolean.Parts
» Dependency Injection and Inversion of Control Framework Modules
» Usage scenarios Introduction to the Spring Framework
» Java EE 6 and 7 Groovy Bean Definition DSL
» Core Container Improvements General Web Improvements
» WebSocket, SockJS, and STOMP Messaging Testing Improvements
» JMS Improvements Caching Improvements
» Web Improvements New Features and Enhancements in Spring Framework 1
» WebSocket Messaging Improvements Testing Improvements
» Core Container Improvements New Features and Enhancements in Spring Framework 4.2
» Data Access Improvements JMS Improvements Web Improvements
» Core Container Improvements Data Access Improvements Caching Improvements
» JMS Improvements Web Improvements WebSocket Messaging Improvements Testing Improvements
» Introduction to the Spring IoC container and beans
» Container overview The IoC container
» Bean overview The IoC container
» Dependencies The IoC container
» y.Baz beans The IoC container
» driverClassName = username = The IoC container
» email = spouse-ref = The IoC container
» y.Bar bean y.Foo constructor-arg y.Foo c:bar-ref baz-ref = y.Foo c:_0-ref _1-ref =
» y.z.MyValueCalculator b.c.ReplacementComputeValue Bean scopes
» y.Foo property Customizing the nature of a bean
» Bean definition inheritance The IoC container
» Container Extension Points The IoC container
» Annotation-based container configuration The IoC container
» Classpath scanning and managed components
» Using JSR 330 Standard Annotations
» Java-based container configuration The IoC container
» Environment abstraction The IoC container
» Registering a LoadTimeWeaver Additional Capabilities of the ApplicationContext
» The BeanFactory The IoC container
» Introduction The Resource interface
» Built-in Resource implementations Resources
» The ResourceLoaderAware interface Resources
» Resources as dependencies Application contexts and Resource paths
» Introduction Validation, Data Binding, and Type Conversion
» Validation using Spring’s Validator interface
» Resolving codes to error messages Bean manipulation and the BeanWrapper
» Spring Type Conversion Validation, Data Binding, and Type Conversion
» Spring Field Formatting Validation, Data Binding, and Type Conversion
» Configuring a global date time format
» Spring Validation Validation, Data Binding, and Type Conversion
» Introduction Feature Overview Spring Expression Language SpEL
» Expression Evaluation using Spring’s Expression Interface
» Expression support for defining bean definitions
» Language Reference Spring Expression Language SpEL
» 3e0 4 .getValueDouble. 4e0 2 .getValueDouble.
» Classes used in the examples
» Introduction Aspect Oriented Programming with Spring
» Schema-based AOP support Aspect Oriented Programming with Spring
» y.service.DefaultFooService y.SimpleProfiler aop:config
» Choosing which AOP declaration style to use
» Mixing aspect types Proxying mechanisms
» Introduction Pointcut API in Spring
» Advisor API in Spring Using the ProxyFactoryBean to create AOP proxies
» Concise proxy definitions Spring AOP APIs
» Creating AOP proxies programmatically with the ProxyFactory Manipulating advised objects
» Using the auto-proxy facility
» Using TargetSources Spring AOP APIs
» Mock Objects Unit Testing support Classes
» Overview Goals of Integration Testing
» JDBC Testing Support Annotations
» Spring TestContext Framework Integration Testing
» loginAction-ref = username = userPreferences-ref = theme =
» PetClinic Example Integration Testing
» Understanding the Spring Framework transaction abstraction
» Synchronizing resources with transactions
» Declarative transaction management Transaction Management
» y.service.DefaultFooService Transaction Management
» y.service.DefaultFooService y.SimpleProfiler y.service.DefaultFooService
» y.SimpleProfiler Transaction Management
» Programmatic transaction management Transaction Management
» Choosing between programmatic and declarative transaction management Transaction bound event
» Application server-specific integration Transaction Management
» Introduction Consistent exception hierarchy
» Annotations used for configuring DAO or Repository classes
» Introduction to Spring Framework JDBC
» Using the JDBC core classes to control basic JDBC processing and error handling
» Controlling database connections Data access with JDBC
» JDBC batch operations Data access with JDBC
» Simplifying JDBC operations with the SimpleJdbc classes
» Modeling JDBC operations as Java objects
» Common problems with parameter and data value handling
» Embedded database support Data access with JDBC
» Initializing a DataSource Data access with JDBC
» Introduction to ORM with Spring
» General ORM integration considerations
» Hibernate Object Relational Mapping ORM Data Access
» JDO Object Relational Mapping ORM Data Access
» Introduction Marshaller and Unmarshaller
» Using Marshaller and Unmarshaller
» XML Schema-based Configuration JAXB
» Castor Marshalling XML using OX Mappers
» XMLBeans JiBX Marshalling XML using OX Mappers
» XStream Marshalling XML using OX Mappers
» Introduction to Spring Web MVC framework
» The DispatcherServlet Web MVC framework
» Handler mappings Web MVC framework
» Resolving views Web MVC framework
» Using flash attributes Web MVC framework
» Building URIs Web MVC framework
» Using locales Web MVC framework
» Using themes Web MVC framework
» Spring’s multipart file upload support
» Handling exceptions Web MVC framework
» Web Security Convention over configuration support
» y.RegistrationController HTTP caching support
» Code-based Servlet container initialization
» Configuring Spring MVC Web MVC framework
» simpleDateFormat = Web MVC framework
» Introduction Thymeleaf Groovy Markup Templates
» Velocity FreeMarker View technologies
» Document views PDFExcel Property
» Feed Views JSON Mapping View
» Introduction Integrating with other web frameworks
» Common configuration Integrating with other web frameworks
» JavaServer Faces 1.2 Apache Struts 2.x
» Introduction Portlet MVC Framework
» The DispatcherPortlet Portlet MVC Framework
» The ViewRendererServlet Controllers Portlet MVC Framework
» Handler mappings Portlet MVC Framework
» Views and resolving them Multipart file upload support
» Handling exceptions Annotation-based controller configuration
» absolute-ordering absolute-ordering WebSocket API
» SockJS Fallback Options WebSocket Support
» STOMP Over WebSocket Messaging Architecture
» Introduction Controller method CORS configuration
» Global CORS configuration Advanced Customization
» Introduction Remoting and web services using Spring
» Using Hessian or Burlap to remotely call services via HTTP
» Exposing services using HTTP invokers
» Web services Remoting and web services using Spring
» JMS Remoting and web services using Spring
» Accessing RESTful services on the Client
» Introduction Accessing EJBs Enterprise JavaBeans EJB integration
» Introduction JMS Java Message Service
» Using Spring JMS JMS Java Message Service
» Sending a Message JMS Java Message Service
» Receiving a message JMS Java Message Service
» Support for JCA Message Endpoints
» Annotation-driven listener endpoints JMS Java Message Service
» JMS namespace support JMS Java Message Service
» Introduction Exporting your beans to JMX
» Controlling the management interface of your beans
» Controlling the ObjectNames for your beans
» Accessing MBeans via Proxies
» Introduction Configuring CCI JCA CCI
» Using Spring’s CCI access support
» Modeling CCI access as operation objects
» Using the JavaMail MimeMessageHelper
» Introduction The Spring TaskExecutor abstraction
» The Spring TaskScheduler abstraction
» Annotation Support for Scheduling and Asynchronous Execution
» The task namespace Task Execution and Scheduling
» Introduction A first example
» y.DefaultBookingService property Defining beans that are backed by dynamic languages
» y.DefaultBookingService property Dynamic language support
» Scenarios Dynamic language support
» Bits and bobs y.DefaultBookingService property
» Introduction Understanding the cache abstraction
» Declarative annotation-based caching Cache Abstraction
» JCache JSR-107 annotations Cache Abstraction
» Declarative XML-based caching y.service.DefaultBookService
» Configuring the cache storage name =
» Classic ORM usage Classic Spring Usage
» JMS Usage Classic Spring Usage
» Concise proxy definitions Classic Spring AOP Usage
» Using the autoproxy facility
» Using TargetSources Classic Spring AOP Usage
» Introduction XML Schema-based configuration
» Introduction Authoring the schema
» Coding a NamespaceHandler Extensible XML authoring
» BeanDefinitionParser Extensible XML authoring
» Registering the handler and the schema
» Using a custom extension in your Spring XML configuration Meatier examples
» Introduction The argument tag The bind tag
» The escapeBody tag The eval tag The hasBindErrors tag
» The htmlEscape tag The message tag
» The nestedPath tag The param tag The theme tag
» The transform tag The url tag
» Introduction The button tag The checkbox tag
» The checkboxes tag The errors tag
» The option tag The options tag
» The password tag The radiobutton tag
Show more