隐藏页面特效

Spring表达式语言SpEL

    Spring表达式语言,简称SpEL,是一个支持运行时查询和操作对象图的强大的表达式语言。语法类似于EL:SpEL使用#{…}作为定界符,所有在大括号中的字符都将被认为是SpEL

    SpEL为bean属性进行动态赋值提供了便利

    通过SpEL可以实现:

  • 通过bean的id对bean进行引用
  • 调用方法及引用对象中的属性
  • 计算表达式的值
  • 正则表达式的匹配

如果我们要为基本类型或者String类型赋值,我们也可以用SpEL:

整数:<property name="count" value="#{5}">

科学计数法:<property name="capacity" value="#{1e4}">

String可以使用单引号或者双引号作为字符创的定界符号:

<property name="name" value="#{"Tom"}">或者我们也可以这么写:

<property name="name" value="#{'Tom'}">

布尔类型"<property name="enabled" value="#{false}" >

我们这里只是说可以用,瞅着都知道这个很麻烦(_)还不如直接赋值,大家知道有这回事就行。

当然我们也可以拿这玩意引用其他对象

<property name="myCar" value="#{car}">这里相当于用了ref属性

也可以用来引用其他对象的属性,这种操作我们是无法通过普通操作完成的:

<property name="myCity" value="#{address.city}">

SpEL还可以调用其他方法,还可以链式操作,真的可以骚上天:

<property name="myCity" value="#{address.toString()}">

<property name="myCity" value="#{address.roString().toUpperCase()}">

其他还有很多丰富的其他功能:

  • 算数运算符:+、-、*、/、%、^
  • 加号还可以用作字符创链接
  • 比较运算符<、>、==、<=、>=、lt、gt、eq、le、ge
  • 逻辑运算符and、or、not、|
  • if-else运算符
  • 正则表达式matches
  • 调用静态方法或者静态属性T()

可以看出SpEL是块非常庞大的内容,我们需要花很久才能将它真正掌握,这里我就提一些比较常用的功能。

先做一下准备工作,先写一下新的JavaBean:

Car.java

  1. private String brand;  
  2. private double price;  
  3. //轮胎周长  
  4. private double tyrePerimeter; 

Person.java

  1. private String name;  
  2. //引用address bean city属性  
  3. private String city;  
  4.     
  5.     
  6. private Car car;  
  7. //根据carprice 确定info  
  8. //car price>=3000000:经理  
  9. //否则为白领  
  10. private String info;  

Address.java和之前的一样,接下来来写配置文件beans-spel.xml

SpEL赋字面量的值

  1. <bean id="address" class="com.figsprite.bean.SpEL.Address">  
  2.     <property name="city" value="#{'上海'}"/>  
  3.     <property name="street" value="#{'陆家嘴'}"/>  
  4.  </bean>  

SpEL 算法运算符 调用静态属性

  1. <bean id="car" class="com.figsprite.bean.SpEL.Car">  
  2.     <property name="brand" value="奥迪"/>  
  3.     <property name="price" value="5000000"/>  
  4.     <property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 80}"  
  5. </bean>  

SpEL 引用其他对象 引用其他对象属性 if-else

  1. <bean id="person" class="com.figsprite.bean.SpEL.Person">  
  2.     <property name="car" value="#{car}"/>  
  3.     <property name="city" value="#{address.city}"/>  
  4.     <property name="info" value="#{car.price>3000000?'经理':'白领'}"/>  
  5.     <property name="name" value="Tom"/>  
  6. </bean>  

这里就存在动态赋值,如info属性,我需要根据car.price的具体值决定info的值

 

 

 


__EOF__

本文作者FigSprite
本文链接https://www.cnblogs.com/figsprite/p/10774345.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FigSprite  阅读(4212)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示