您的位置:首页 > 编程语言 > Java开发

【Spring学习13】表达式语言(Spring EL)

2017-03-31 19:33 260 查看
Spring表达式语言(Spring Expression Language 简写SpEL)是类似于OGNL和JSF EL的表达式语言, 能够在运行时构建复杂表达式, 存取对象属性、调用方法等。所有的SpEL都支持XML和Annotation两种方式, 使用的格式为:#{SpEL expression}。

用在xml上的例子:

通常情况,在字段要引用外部的bean时,我们都使用ref属性指明外部bean的id:

<bean id="cellphonesender" class="twm.spring.start.NotifyServiceByCellPhoneImpl" />
<bean id="order" class="twm.spring.start.Order">
<property name="notifyservice" ref="cellphonesender"></property>
</bean>


但是我们如果使用el表达式的话,这里同样可以用value属性。

<bean id="order" class="twm.spring.start.Order">
<property name="notifyservice" value="#{cellphonesender}"></property>
</bean>


用在注解上:

public class Test {
@Value("#{'Messi'.toUpperCase()}")
private String name;
}


在java程序中,我们可以使用ExpressionParser类来解析SpEL字符串:

// 1. 构建解析器
ExpressionParser parser = new SpelExpressionParser();
// 2. 解析表达式
Expression exp = parser.parseExpression("'Messi'.toUpperCase()");
// 3. 获取结果
exp.getValue();


看一些常用的el用法(下面都以注解方式举例,只要关心表达式字符串的内容就行):

一、引用bean:

@Value("#{customer}")


二、属性和方法调用

@Value("#{customer.name}")


@Value("#{'Messi'.toUpperCase()}");


@Value("#{userBean.getUserLocation()}");


三、SpEL 操作符

1.关系操作符,包括:等于 (==, eq),不等于 (!=, ne),小于 (<, lt),,小于等于(<= , le),大于(>, gt),大于等于 (>=, ge)

2.逻辑操作符,包括:and,or,and not(!)

3.数学操作符,包括:加 (+),减 (-),乘 (*),除 (/),取模 (%),幂指数 (^)。

@Value("#{1>=1 and 6>(10/2)}")
private boolean testbool;//true


注意这里,因为表达式中出现了xml敏感的符号,比如”<”,”>”,”/”等,当生成XML时,会破坏了XML结构,使数据中断。所以如果在 xml写表达式的话,要注意用转义字符或使用
<![CDATA[ ]]>


<bean id="order" class="twm.spring.start.Order">
<property name="testbool" value="#{1 ≥ 1 and 6 > (10/2)}"></property>
</bean>


四、集合取值

@Value("#{testBean.map['MapA']}")
private String mapA;


@Value("#{testBean.list[0]}")
private String list;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: