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

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 &ge; 1 and 6 &gt; (10/2)}"></property> 
</bean>

四、集合取值

@Value("#{testBean.map['MapA']}")
private String mapA;
@Value("#{testBean.list[0]}")
private String list;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架中使用EL表达式(Expression Language)可以方便地访问和操作Java对象,主要用于在JSP页面或Spring的注解中进行数据绑定和表达式求值。 以下是在Spring中使用EL表达式的几个常见场景和用法: 1. 在JSP页面中使用EL表达式: 在JSP页面中,可以使用EL表达式访问和操作Java对象的属性、方法和集合。例如,`${user.name}`可以获取名为user的Java对象的name属性值。 2. 在Spring MVC的注解中使用EL表达式: 在Spring MVC中,可以使用EL表达式在注解中动态地设置属性值。例如,`@RequestMapping("${url.mapping}")`可以根据EL表达式`${url.mapping}`的值动态地设置请求映射路径。 3. 在Spring的XML配置文件中使用EL表达式: 在Spring的配置文件中,可以使用EL表达式引用其他属性或bean的值。例如,`<property name="timeout" value="${connection.timeout}"/>`可以将`${connection.timeout}`的值设置为bean的timeout属性。 4. 使用Spring表达式语言(SpEL): Spring框架还提供了一种更强大的EL表达式语言,称为SpELSpring Expression Language)。SpEL支持更复杂的表达式求值和操作,可以在Spring的注解、XML配置文件以及运行时动态注入等场景中使用。 需要注意的是,在使用EL表达式时,需要确保相关的JAR包已经添加到项目的依赖中,通常是`javax.el-api`和`jstl`。 希望以上信息对你有所帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值