SpringSpEL表达式语言

Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言,支持运行时查询和操作对象图 。表达式语言一般是用最简单的形式完

很多朋友对于SpringSpEL表达式语言和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

2. 类相关表达式

类类型表达式、类实例化、instanceof表达式、变量定义和引用、赋值表达式、自定义函数、对象属性访问和安全导航表达式、对象方法调用、Bean引用;

3. 集合相关表达式

内联列表、内联数组、集合、字典访问、列表、字典、数组修改、集合投影、集合选择;不支持多维内联数组初始化;不支持内联字典定义;

4. 其他表达式

模板表达式。

注意:SpEL 表达式中的关键字不区分大小写。

示例

例 1

下面使用SpEL 输出一个简单的字符串“Hello, world”。

包net.bian Cheng;导入org.springframework.expression.Expression;导入org.springframework.expression.ExpressionParser;导入org.springframework.expression.spel.standard.SpelExpressionParser;公共类测试{ public static void main(String[] args) { //构造解析器ExpressionParser parser=new SpelExpressionParser(); //解析器解析字符串表达式Expression exp=parser.parseExpression(”Hello, world”); //获取表达式的值String message=( String) exp.getValue(); System.out.println(消息); //或者//System.out.println(parser.parseExpression(”Hello,world”).getValue()); }}SpEL 您还可以调用方法、访问属性和调用构造函数。

SpringSpEL表达式语言

例 2

使用SpEL调用concat()方法,代码如下。

包net.bian Cheng;导入org.springframework.expression.Expression;导入org.springframework.expression.ExpressionParser;导入org.springframework.expression.spel.standard.SpelExpressionParser;公共类测试{ public static void main(String[] args) { ExpressionParser 解析器=new SpelExpressionParser();表达式exp=parser.parseExpression(”欢迎世界’.concat(‘!’)’);字符串消息=(String) exp.getValue(); System.out.println(消息); }}

例 3

使用SpEL调用String的bytes属性将字符串转换为字节数组。代码如下。

包net.bian Cheng;导入org.springframework.expression.Expression;导入org.springframework.expression.ExpressionParser;导入org.springframework.expression.spel.standard.SpelExpressionParser;公共类测试{ public static void main(String[] args) { ExpressionParser 解析器=new SpelExpressionParser();表达式exp=parser.parseExpression(”Hello world’.bytes’); byte[] 字节=(byte[]) exp.getValue(); for (int i=0; i bytes.length; i++) { System.out.print(bytes[i] + ‘ ‘); } } }}

例 4

SpEL 还支持使用嵌套属性。下面将字符串转换为字节以获得长度。代码如下。

包net.bian Cheng;导入org.springframework.expression.Expression;导入org.springframework.expression.ExpressionParser;导入org.springframework.expression.spel.standard.SpelExpressionParser;公共类测试{ public static void main(String[] args) { ExpressionParser 解析器=new SpelExpressionParser();表达式exp=parser.parseExpression(”Hello world’.bytes.length’); int 长度=(整数) exp.getValue(); System.out.println(长度); } }

例 5

可以调用字符串的构造函数,而不是使用字符串文字。以下代码将字符串内容转换为大写字母。

包net.bian Cheng;导入org.springframework.expression.Expression;导入org.springframework.expression.ExpressionParser;导入org.springframework.expression.spel.standard.SpelExpressionParser;公共类测试{ public static void main(String[] args) { ExpressionParser 解析器=new SpelExpressionParser();表达式exp=parser.parseExpression(‘new String(‘hello spel’).toUpperCase()’);字符串消息=exp.getValue(String.class); System.out.println(消息); }}

SpEL对Bean定义的支持

SpEL 表达式可以与XML 或基于注释的配置元数据一起使用。 SpEL 表达式以#{ 开头并以} 结尾,例如#{‘Hello’}。

1. 基于XML的配置

SpringSpEL表达式语言

可以使用以下表达式来设置属性或构造函数的参数值。

bean id=’number’ class=’net.bian Cheng.Number’ property name=’randomNumber’ value=’#{T(java.lang.Math).random() * 100.0}’//Bean也可以通过以下方式引用name 其他Bean属性,如下面的代码。

bean id=’shapeGuess’ class=’net.bian Cheng.ShapeGuess’ property name=’shapSeed’ value=’#{number.randomNumber}’//bean

2. 基于注解的配置

@Value注解可以放在字段、方法、构造函数上参数来指定默认值。以下是设置字段变量默认值的示例。

public static class FieldValueTestBean @value(‘#{ systemProperties[ ‘user.region’] }’) private String defaultLocale; public void setDefaultLocale (String defaultLocale) { this.defaultLocale=defaultLocale; } public string getDefaultLocale() { return this.defaultLocale ; }}

SpEL中的运算符

我们可以在SpEL中使用运算符,例如算术运算符、关系运算符、逻辑运算符。

例 6

package net.bian Cheng;import org.springframework.expression.ExpressionParser;import org.springframework.expression.spel.standard.SpelExpressionParser;public class Test { public static void main(String[] args) { ExpressionParser parser=new SpelExpressionParser (); //算术运算符System.out.println(parser.parseExpression(”Hello SPEL’+’!”).getValue()); System.out.println(parser.parseExpression(’10 * 10/2′).getValue()); System.out.println(parser.parseExpression(”今天是:’+ new java.util.Date()’).getValue()); //逻辑运算符System.out .println(parser.parseExpression(‘true and true’).getValue()); //关系运算符System.out.println(parser.parseExpression(”sonoo’.length()==5′).getValue( )); }}

SpEL中的变量

在SpEL 中,我们可以定义变量并在方法中使用它们。定义变量需要StandardEvaluationContext 类。

例 7

计算类代码如下。

用户评论

SpringSpEL表达式语言
爱你心口难开

感觉Spring框架中还有很多东西需要学习!这篇博客讲解了Spring SpEL表达式语言非常清楚,以前经常用它都不知道它的具体原理,现在终于明白了。真的很有帮助!

    有15位网友表示赞同!

SpringSpEL表达式语言
刺心爱人i

作为一名Java菜鸟,刚接触到SpEL表达式,这个博客写的很好能让我理解!感谢作者分享这段有用的知识,我现在可以更好地使用Spring框架了。

    有9位网友表示赞同!

SpringSpEL表达式语言
身影

学习过Groovy和JShell,我对这类表达式的语法比较熟悉。这本书确实讲解得很深入,对一些细节的解释很有帮助,对于想要深入了解SpEL的人来说是个不错的参考。

    有20位网友表示赞同!

SpringSpEL表达式语言
你瞒我瞒

这个博客让我了解了SpEL表达式可以做的事!之前一直以为它只用于数据处理,没想到还有很多其他应用场景。打算回家试试看能不能用它实现一个简单的自动化任务

    有20位网友表示赞同!

SpringSpEL表达式语言
▼遗忘那段似水年华

博主把Spring SpEL表达式语言写的太复杂了,感觉有些绕。我自己在学习的时候比较喜欢简洁明了的讲解,希望能提供一些更易懂的例子!

    有10位网友表示赞同!

SpringSpEL表达式语言
一别经年

这篇博客虽然介绍得不错,但我觉得缺少针对不同场景的实例分析。我希望作者能提供更多实践案例,这样对我们理解SpEL表达式的应用场景更有帮助。

    有8位网友表示赞同!

SpringSpEL表达式语言
蝶恋花╮

说实话,我一直在Spring框架里用SpEL表达式,但是从未深入了解过它的语法规则和优缺点。这篇博客读完之后感觉受益匪浅,特别是对于一些常用的方法和限制的解释让我受益良多!

    有5位网友表示赞同!

SpringSpEL表达式语言
剑已封鞘

学习编程需要不断探索新的工具和技术,这篇博文的分享非常及时!我会将SpEL表达式纳入我的学习计划,相信它能帮助我更有效率地运用Spring框架。

    有12位网友表示赞同!

SpringSpEL表达式语言
安陌醉生

感觉这篇文章太理论了,缺乏实践性的内容!我希望作者能加入一些代码示例,这样更便于读者理解和学习。毕竟看懂了文章的原理还需要实战练习才能真正掌握。

    有9位网友表示赞同!

SpringSpEL表达式语言
枫无痕

我一直以为SpEL表达式只是个简单的语法工具,没想到它还有这么强大的功能!这篇博客让我对Spring框架有了更深入的了解,我一定会继续学习这个表达式的用法,看看它还能带来哪些惊喜!

    有17位网友表示赞同!

SpringSpEL表达式语言
君临臣

对于想要使用SpEL表达式的开发者来说,这份博文是很不错的入门资源。作者清晰的讲解和示例让整个学习过程变得更加容易理解。

    有9位网友表示赞同!

SpringSpEL表达式语言
寻鱼水之欢

虽然这篇博客介绍Spring SpEL表达式语言挺详细,但是我感觉还是不够直观!希望能结合实际案例进行展示,这样更容易帮助读者理解它的应用场景

    有13位网友表示赞同!

SpringSpEL表达式语言
花花世界总是那么虚伪﹌

SpEL表达式这种技术确实很强大,可以简化很多工作流程。但对于初学者来说,学习曲线可能比较陡峭,需要不断练习才能熟练掌握。希望以后能看到更多针对不同需求的SpEL应用案例

    有11位网友表示赞同!

SpringSpEL表达式语言
歆久

Spring SpEL表达式语言是真的很棒!它让我可以在代码中轻松地进行数据操作和判断条件,提高了开发效率!这篇博客讲解得非常全面,我从中学到了很多有用的知识。推荐给大家参考!

    有14位网友表示赞同!

SpringSpEL表达式语言
断桥残雪

我对编程的理解停留在基本语法层面,所以这篇文章对我来说有些深奥难懂。希望以后能看到更易于入门,针对初学者的SpEL表达式教程。

    有9位网友表示赞同!

SpringSpEL表达式语言
?亡梦爱人

Spring框架里很多功能都离不开SpEL表达式的支持,这篇博客让我对这个工具有了更深入的理解。感谢作者分享如此宝贵的经验!

    有10位网友表示赞同!

SpringSpEL表达式语言
命硬

总觉得学习技术需要系统性的书籍,这篇博客虽然介绍了很多概念,但缺乏完整性和实践指导。希望以后能够看到一些针对性的教程或者书本。

    有18位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126649.html

(0)
小su's avatar小su
上一篇 2024年9月1日 下午9:56
下一篇 2024年9月1日 下午10:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注