spEL表达式的使用

spEL(Spring Expression Language)是一种表达式语言,它是spring3.x版本的新特性。

它的作用是:
支持在运行时操作和查询对象,其语法类似统一的EL语言,但是SpEL提供了额外的功能,功能更强大。

语法:

#{…} , 引用另一个Bean 、属性、 方法 

SpEL表达式的使用功能比较多,Bean操作相关的通常有:

#{beanid} 引用Bean(具体对象)
#{beanId.属性} 引用Bean的属性
#{beanId.方法(参数)} 调用Bean的方法 

xml配置,注意使用这个需要有getter方法,或者将属性设置为public(经常使用的是添加getter方法)

<!-- spE1的使用语法#{1+5}可以运算出id=6; p:car-ref-"#{car}]" 自动去找这个对象; #[car.name} 可以直找到这个车的名字-->
<bean name= "person3" class="cn.cons tructor. Person " ”p:id= "#{1+5}" p: name="#{car. name}" p:car= "#{car}"/>
### SpEL 表达式的概述 SpEL 是 Spring Expression Language 的缩写,它允许开发者通过一种简洁而强大的方式来访问对象的属性、调用方法并执行复杂的逻辑操作。其功能涵盖了算术运算、逻辑判断、正则表达式匹配等多种场景[^3]。 以下是关于 SpEL 表达式的具体用法及其示例: --- ### 基本语法与操作 #### 访问对象属性 可以轻松地读取或设置 Java 对象的属性值。例如: ```java ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); // 创建一个测试对象 Person person = new Person(); person.setName("Alice"); context.setRootObject(person); String name = (String) parser.parseExpression("name").getValue(context); System.out.println(name); // 输出 Alice ``` 上述代码展示了如何利用 SpEL 获取 `Person` 类型的对象名称属性。 --- #### 调用方法 除了简单的属性访问外,还可以直接调用类上的方法。比如计算两个数相加的结果: ```java Integer result = (Integer) parser.parseExpression("T(java.lang.Math).max(20, 10)").getValue(); System.out.println(result); // 输出 20 ``` 这里使用了静态导入的方式调用了 `Math.max()` 方法[^2]。 --- #### 条件判断 支持基于条件语句的操作符来进行分支处理。下面是一个例子展示当年龄大于等于18岁时返回成年人的信息: ```java boolean isAdult = (Boolean) parser.parseExpression("'adult'.equalsIgnoreCase('ADULT') ? true : false").getValue(); System.out.println(isAdult); // 输出 true ``` 此片段说明如果字符串完全一致,则判定为真;否则假。 --- #### 集合操作 对于列表或者数组类型的变量也提供了丰富的工具集去遍历筛选等动作。如下所示的是过滤掉所有小于零的数据项: ```java List<Integer> numbers = Arrays.asList(-5,-4,0,7,9); Expression expression = parser.parseExpression("#list.?[#this >= 0]"); context.setVariable("list",numbers ); List<Integer> positives = (List<Integer>)expression.getValue(context , List.class); System.out.println(positives ); // 打印 [0, 7, 9] ``` 这段脚本实现了从给定整数序列里挑选非负数值的功能。 --- ### 注册自定义函数扩展 为了增强灵活性,用户能够将自己的实用程序添加至标准求值环境中以便重复应用这些特定行为。实现途径即借助于之前提到过的接口完成注册过程: ```java public class MyUtils { public static String reverse(String input){ StringBuilder sb=new StringBuilder(input); return sb.reverse().toString(); } } Method method=MyUtils.class.getMethod("reverse",new Class[]{String.class}); context.registerFunction("reverseText",method ); String reversed=(String )parser .parseExpression ("reverseText('hello world')" ). getValue (context ); System.out.println(reversed ); // olleH dlrow ``` 上面的例子演示了一个翻转字符串的小技巧,并将其作为新特性加入到了现有的解析体系当中[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值