Spring 3 presenta Spring Expression Language (Spring Expression Language, SpEL), que puede ensamblar valores en propiedades de bean y parámetros de constructor de una manera poderosa y concisa. Las expresiones utilizadas en este proceso se ejecutarán valor calculado cuando
SpEL tiene muchas características, que incluyen:
Use la identificación del bean para referirse al bean
Llamar a métodos y acceder a las propiedades de los objetos.
Realizar operaciones aritméticas, relacionales y lógicas sobre valores
coincidencia de expresiones regulares
establecer la operación
Expresión base SpEL
representa un valor literal
representa un valor de punto flotante
#{
3.1415}
Los valores también se pueden expresar en notación científica
#{
9.87E4}
El valor calculado por la expresión es 98.700
Se utiliza para calcular valores literales de tipo String
#{
'HELLO'}
Los valores literales verdadero y falso se evalúan a sus correspondientes valores booleanos
#{
flase}
Frijoles de referencia, propiedades y métodos
Otra cosa básica que SpEL puede hacer es referirse a otros beans por ID. Por ejemplo, puede usar SpEL para conectar un bean a una propiedad de otro bean
Usar bean ID como expresión SpEL
#{
sgtPeppers}
sgtPeppers为beanID
Haga referencia al atributo de artista de sgtPeppers
#{
sgtPeppers.artist}
Se hace referencia a un bean con un ID de sgtPeppers, seguido de una referencia al atributo del artista
Llame al método selectArtist() de artistSelector
#{
artistSelector.selectArtist()}
Se hace referencia a un bean cuyo ID es artistSelector, y se llama al método selectArtist() del bean
Para el valor de retorno del método llamado, también podemos llamar a su método
#{
artistSelector.selectArtist().toUpperCase()}
Si el método selectArtist() devuelve una cadena, puede llamar
Use toUpperCase() para cambiar todas las cadenas a mayúsculas
Si el valor de retorno de selectArtist() es nulo, se producirá una NullPointerException y podemos usar operadores de tipo seguro
#{
artistSelector.selectArtist()?.toUpperCase()}
En lugar de simplemente usar un punto ( . ) para acceder al método toUpperCase(), ahora usamos el operador "?". Este operador se asegura de que el elemento al que corresponde no sea nulo antes de acceder al contenido a su derecha. Entonces, si el valor de retorno de selectArtist() es nulo, entonces SpEL no llamará al método toUpperCase(). El valor de retorno de la expresión será nulo
Usar tipos en expresiones
Si desea acceder a métodos y constantes del alcance de la clase en SpEL, debe confiar en el operador clave T()
Para expresar la clase Math de Java en SpEL, el operador T() debe usarse de la siguiente manera
T(java.lang.Math).PI
Cableado de valores de PI en propiedades de bean
Un método estático del tipo obtenido por el operador T() puede llamarse:
T(java.lang.Math).random()
Calcular un número aleatorio entre 0 y 1
operador SpEL
Combinar expresiones simples en expresiones más complejas
calcular
#{
T(java.lang.Math).PI * circle.radius ^ 2}
Calcula el área del círculo definido en el frijol círculo.
Cuando se utiliza un valor de tipo String, el operador "+" realiza una operación de concatenación, igual que en Java
operador de comparación
#{
counter.total == 100}
#{
counter.total eq 100}
Para comparar la igualdad de dos números, puede usar el operador de doble igual
También puede usar el operador eq literal
La expresión se evalúa como un valor booleano.
Operador ternario (ternario)
#{
scoreboard.score > 1000 ? "winner" : "loser"}
A juzgar si scoreboard.score>1000, el resultado del cálculo es "¡Ganador!" de la clase String, de lo contrario, el resultado es Perdedor
Un caso de uso común para el operador ternario es verificar valores nulos y reemplazar nulo con un valor predeterminado
#{
disc.title ?: 'Rattleand Hum'}
Juzgará si el valor de disc.title es nulo, si es nulo, entonces el resultado del cálculo de la expresión será "Rattle and Hum"
Evaluar expresiones regulares
Cuando se trabaja con texto, a veces resulta útil comprobar si el texto coincide con un determinado patrón. SpEL admite la coincidencia de patrones en expresiones a través del operador de coincidencias. operación de partidos
Aplica una expresión regular (como argumento de la derecha) a un texto de tipo String (como argumento de la izquierda). El resultado de la operación de coincidencias devolverá un valor de tipo booleano: si con
Devuelve verdadero si la expresión regular coincide; de lo contrario, devuelve falso
#{
admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._%+-]+\\.com'}
Comprobar si una cadena contiene una dirección de correo electrónico válida
Calcular colección
hace referencia a un elemento en una lista
#{
jukebox.song[4].title}
Calcule el atributo de título del quinto elemento (de base cero) en la colección de canciones, que se deriva del bean jukebox con el ID
Elija al azar de jukebox
#{
jukebox.song [T(java.lang.Math).random() * jukebox.songs.size() ].title}
El operador "[]" se usa para obtener un elemento de una colección o un arreglo por índice, de hecho, también puede obtener un carácter de un String
#{
'this is a test' [3]}
Hace referencia al cuarto carácter (basado en cero) en String, que es "s"
operador de consulta ( .?[])
Se utiliza para filtrar la colección para obtener un subconjunto de la colección.
#{
jukebox.songs.?[artist eq 'Aerosmith']}
Para obtener todas las canciones en la máquina de discos cuyo atributo de artista sea Aerosmith, el operador de selección acepta otra expresión entre corchetes. Cuando SpEL itera sobre la lista de canciones, evalúa esta expresión para cada entrada en la colección de canciones. Si la expresión se evalúa como verdadera, la entrada se coloca en la nueva colección. De lo contrario, no se colocará en la nueva colección. En este caso, la expresión interna verifica si la propiedad del artista de la canción es igual a Aerosmith.
“.^[]”和“.$[]”
, que se utilizan para consultar la primera y la última coincidencia de la colección, respectivamente
El operador de proyección ( .![]), que selecciona atributos específicos de cada miembro de una colección y los coloca en otra colección
Nota:
El entorno anterior se probó con éxito en ubuntu16.04 lts
Los textos anteriores son opiniones personales, si hay algún error o sugerencia, contácteme a tiempo.