spring SpEL--转
原文:http://www.tuicool.com/articles/Jbq2QnM
概要:

Spring表达式语言:SpEL
- Spring表达式语言 (简称 SpEL ):是一个 支持运行时查询和操作对象图的强大的表达式语言
- 语言类似于EL:SpEL使用#{...} 作为定界符,所有在大括号中的字符都将被认为是SpEL
- SpEL为bean的属性进行动态赋值提供了便利
- 通过SpEL可以实现:
- 通过bean的id对bean进行引用
- 调用方法以及引用对象中的属性
- 计算表达式的值
- 正则表达式的匹配
SpEL:字面量(仅赋予字面值,使用SpEL的意义不大)
- 字面量的表示
- 整数:<property name="count" value=" #{5} "/>
- 小数:<property name="frequency" value=" #{89.7} "/>
- 科学计算法:<property name="capacity" value=" #{1e4} "/>
- String可以使用单引号或者双引号作为字符串的定界符号 :<property name="name" value=" #{‘Chuck’} "/>或<property name='name' value=' #{"Chuck"} '/>
- Boolean:<property name="enabled" value=" #{false} "/>
SpEL:引用Bean、属性和方法
- 引用其他对象:

- 引用其他对象的属性(用普通的方式做不到的)

- 调用其他方法,还可以链式操作

- 调用静态方法或静态属性 :通过T()调用一个类的静态方法,它将返回一个Class Object,然后再调用相应的方法或属性:

SpEL支持的运算符号
- 算数运算符:+,-,*,/,%,^

- 加号还可以用作字符串连接:

- 比较运算符:<,>,==,<=,>=,lt,gt,eq,le,ge

- 逻辑运算符号:and,or,not,|

- if-else运算符:?:(temary),?:(Elvis)

- if-else的变体

- 正则表达式:matches

实例代码详解
目录结构(用到的包)

Address.java
package com.coslay.beans.spel;
public class Address {
private String city;
private String street;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@Override
public String toString() {
return "Address [city=" + city + ", street=" + street + "]";
}
}
Car.java
package com.coslay.beans.spel;
public class Car {
private String brand;
private double price;
// 轮胎的周长
private double tyrePerimeter;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Car() {
System.out.println("Car's Constructor...");
}
public double getTyrePerimeter() {
return tyrePerimeter;
}
public void setTyrePerimeter(double tyrePerimeter) {
this.tyrePerimeter = tyrePerimeter;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", price=" + price + ", tyrePerimeter="
+ tyrePerimeter + "]";
}
}
Person.java
package com.coslay.beans.spel;
public class Person {
private String name;
private Car car;
// 引用address bean的city属性
private String city;
// 根据car的price确定info:car的price》=300000:金额
// 否则为:白领
private String info;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "Person [name=" + name + ", car=" + car + ", city=" + city
+ ", info=" + info + "]";
}
}
Main.java
package com.coslay.beans.spel; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"beans-spel.xml"); Address address = (Address) ctx.getBean("address");
System.out.println(address); Car car = (Car) ctx.getBean("car");
System.out.println(car); Person person = (Person) ctx.getBean("person");
System.out.println(person);
}
}
beans-spel.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="address" class="com.coslay.beans.spel.Address">
<!-- 使用spel为属性赋一个字面值 -->
<property name="city" value="#{'beijint'}"></property>
<property name="street" value="WuDaoKou"></property>
</bean> <bean id="car" class="com.coslay.beans.spel.Car">
<property name="brand" value="Audi"></property>
<property name="price" value="5000000"></property>
<!-- 使用SpEL引用类的静态属性 -->
<property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 80}"></property>
</bean> <bean id="person" class="com.coslay.beans.spel.Person">
<!-- 使用 SpEL来引用其他的Bean -->
<property name="car" value="#{car}"></property>
<!-- 使用SpEL来引用其他的Bean的属性 -->
<property name="city" value="#{address.city}"></property>
<!-- SpEL中使用运算符 -->
<property name="info" value="#{car.price > 300000 ? '金领' : '白领'}"></property>
<property name="name" value="Tom"></property>
</bean>
</beans>
spring SpEL--转的更多相关文章
- Spring SpEL in JSP and Assign SpEL value to Java variable in JSP
Spring SpEL in JSP and Assign SpEL value to Java variable in JSP method 1 use----ServletContextAttri ...
- spring spel
•Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. •语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpE ...
- Spring SpEL表达式的理解
Spring的IOC本质就一个容器,也就是一个对象的工厂,我们通过配置文件注册我们的Bean对象,通过他进行对象的组装与床架. SpEL表达式就是一种字符串编程,类似于JS里面的EVAL的作用,通过它 ...
- spring spel表达式语言
一.通过bean的id对bean进行引用 1.对其他bean的引用 <property name="dept" value="#{dept}"/> ...
- Spring SpEL 各种写法示例
项目路径 先说一下三个bean都有哪些属性 Address.java private String city;//城市 private String street;//街道 Car.java priv ...
- Java获取方法参数名、Spring SpEL解析
@Test public void testParse() { //表达式解析 ExpressionParser expressionParser = new SpelExpressionParser ...
- [原创]java WEB学习笔记100:Spring学习---Spring Bean配置:SpEL详细介绍及代码演示
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring学习-- SpEL表达式
Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括号中的字符都将被认为是 SpE ...
- Spring表达式语言:SpEl
概念: 是一个支持运行时查询和操作的对象图的强大的表达式语言. 语法类似于EL:SpEl使用#{ ...}作为定界符,所有在大括号中的 字符都将被认为是SpEl SpEl为bean的属性进行动态赋值提 ...
- spring mvc和swagger整合
pom.xml 导入jar jar包 所属 备注 spring-core spring spring核心包 spring-expression spring spEl表达式 spring-beans ...
随机推荐
- Wx-小程序-长按复制文本
view: <text bindlongtap='copy' data-name='{{name}}'>{{item.name}}</text> js: copy(e) { v ...
- 01-Spring的概述
Spring概述 ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得 ...
- Android Studio真机无线调试
条件 手机要和电脑处于同一局域网内(即都连同一个WiFi 或者电脑的网线另外一段连接到手机连接WiFi的路由上) 步骤 .首先将手机连接 WiFi 网络 .将手机用数据线与电脑连接,并且在电脑端 打开 ...
- Ip2Region IP转化地址位置
Ip2Region有中文和数据结构支持,是一个很好的第三方ip转换工具. java: <dependency> <groupId>org.lionsoul</groupI ...
- JavaScript ES5类 原型 原型链 组合、原型、寄生式继承
ES5类 原型 原型链 继承 JavaScript中,原型是相对于构造函数(类)的叫法(或者说概念),原型链是相对于构造函数(类)的实例对象的叫法. 对于JavaScript对象,如果在对象自身上找 ...
- postgresql数据库利用函数返回查询结果集
- Python日期
1. datatime from datetime import datetime, date now = datetime.now() print(now) # 2020-01-20 01:24:0 ...
- Xcode 编译运行旧项目报错解决之路
运行几年前做的项目,发现各种编译报错,一个一个解决记录下: 1.Xcode(Xcode9)编译运行报错,但是在 issue navigatior 栏看不到错误信息: 解决方案:在 show repor ...
- oracle 提取文本中的数字
提取文本中的数字部分,并转换为数字 TO_NUMBER(regexp_substr(AGE,'[0-9.]+'))
- CAS 和 ABA 问题
CAS简介 CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制. CAS 它是一条CPU并发原语.操作包含三个操作数 -- 内存位置.预期数值和新值.CAS ...