<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89</id>
	<title>详解 SpringEL（SEL） - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89"/>
	<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;action=history"/>
	<updated>2026-05-17T23:50:06Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4816&amp;oldid=prev</id>
		<title>Eijux：​/* 缓存注解中的 SpringEL 表达式 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4816&amp;oldid=prev"/>
		<updated>2021-11-07T22:20:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;缓存注解中的 SpringEL 表达式&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2021年11月8日 (一) 06:20的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l149&quot;&gt;第149行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第149行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 缓存注解中的 SpringEL 表达式 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 缓存注解中的 SpringEL 表达式 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;参见：“&lt;/del&gt;[[Spring 的 Redis缓存注解]]”中“'''[http://wiki.eijux.com/Spring_%E7%9A%84_Redis%E7%BC%93%E5%AD%98%E6%B3%A8%E8%A7%A3#.E7.BC.93.E5.AD.98.E6.B3.A8.E8.A7.A3.E4.B8.AD.E7.9A.84_SpringEL_.E8.A1.A8.E8.BE.BE.E5.BC.8F 缓存注解中的 SpringEL 表达式]'''”&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;参见：&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;“&lt;/ins&gt;[[Spring 的 Redis缓存注解]]”中“'''[http://wiki.eijux.com/Spring_%E7%9A%84_Redis%E7%BC%93%E5%AD%98%E6%B3%A8%E8%A7%A3#.E7.BC.93.E5.AD.98.E6.B3.A8.E8.A7.A3.E4.B8.AD.E7.9A.84_SpringEL_.E8.A1.A8.E8.BE.BE.E5.BC.8F 缓存注解中的 SpringEL 表达式]'''”&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4815&amp;oldid=prev</id>
		<title>Eijux：​/* 缓存注解中的 SpringEL 表达式 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4815&amp;oldid=prev"/>
		<updated>2021-11-07T22:20:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;缓存注解中的 SpringEL 表达式&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2021年11月8日 (一) 06:20的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l149&quot;&gt;第149行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第149行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 缓存注解中的 SpringEL 表达式 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 缓存注解中的 SpringEL 表达式 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;参见：《Spring &lt;/del&gt;的 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Redis缓存注解》中“&lt;/del&gt;'''[http://wiki.eijux.com/Spring_%E7%9A%84_Redis%E7%BC%93%E5%AD%98%E6%B3%A8%E8%A7%A3#.E7.BC.93.E5.AD.98.E6.B3.A8.E8.A7.A3.E4.B8.AD.E7.9A.84_SpringEL_.E8.A1.A8.E8.BE.BE.E5.BC.8F 缓存注解中的 SpringEL 表达式]'''”&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;参见：“[[Spring &lt;/ins&gt;的 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Redis缓存注解]]”中“&lt;/ins&gt;'''[http://wiki.eijux.com/Spring_%E7%9A%84_Redis%E7%BC%93%E5%AD%98%E6%B3%A8%E8%A7%A3#.E7.BC.93.E5.AD.98.E6.B3.A8.E8.A7.A3.E4.B8.AD.E7.9A.84_SpringEL_.E8.A1.A8.E8.BE.BE.E5.BC.8F 缓存注解中的 SpringEL 表达式]'''”&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4814&amp;oldid=prev</id>
		<title>Eijux：​/* 缓存注解中的 SpringEL 表达式 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4814&amp;oldid=prev"/>
		<updated>2021-11-07T22:19:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;缓存注解中的 SpringEL 表达式&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2021年11月8日 (一) 06:19的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l149&quot;&gt;第149行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第149行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 缓存注解中的 SpringEL 表达式 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 缓存注解中的 SpringEL 表达式 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;参见：&lt;/del&gt;[http://wiki.eijux.com/Spring_%E7%9A%84_Redis%E7%BC%93%E5%AD%98%E6%B3%A8%E8%A7%A3#.E7.BC.93.E5.AD.98.E6.B3.A8.E8.A7.A3.E4.B8.AD.E7.9A.84_SpringEL_.E8.A1.A8.E8.BE.BE.E5.BC.8F &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Spring 的 Redis缓存注解：缓存注解中的 &lt;/del&gt;SpringEL 表达式]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;参见：《Spring 的 Redis缓存注解》中“'''&lt;/ins&gt;[http://wiki.eijux.com/Spring_%E7%9A%84_Redis%E7%BC%93%E5%AD%98%E6%B3%A8%E8%A7%A3#.E7.BC.93.E5.AD.98.E6.B3.A8.E8.A7.A3.E4.B8.AD.E7.9A.84_SpringEL_.E8.A1.A8.E8.BE.BE.E5.BC.8F &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;缓存注解中的 &lt;/ins&gt;SpringEL 表达式]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;'''”&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4813&amp;oldid=prev</id>
		<title>Eijux：​建立内容为“category:Spring  == 关于 ==  Spring 表达式语言全称为“Spring Expression Language”，缩写为“'''SpEL'''”。    SpEL 提供一种强大、简…”的新页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E8%AF%A6%E8%A7%A3_SpringEL%EF%BC%88SEL%EF%BC%89&amp;diff=4813&amp;oldid=prev"/>
		<updated>2021-11-07T22:17:21Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“&lt;a href=&quot;/%E5%88%86%E7%B1%BB:Spring&quot; title=&quot;分类:Spring&quot;&gt;category:Spring&lt;/a&gt;  == 关于 ==  Spring 表达式语言全称为“Spring Expression Language”，缩写为“&amp;#039;&amp;#039;&amp;#039;SpEL&amp;#039;&amp;#039;&amp;#039;”。    SpEL 提供一种强大、简…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:Spring]]&lt;br /&gt;
&lt;br /&gt;
== 关于 ==&lt;br /&gt;
 Spring 表达式语言全称为“Spring Expression Language”，缩写为“'''SpEL'''”。&lt;br /&gt;
 &lt;br /&gt;
 SpEL 提供一种强大、简洁的 Spring Bean 的动态操作表达式。&lt;br /&gt;
 SpEL 表达式可以在运行期间执行，表达式的值可以动态装配到 Spring Bean 属性或构造函数中，表达式可以调用 Java 静态方法，可以访问 Properties 文件中的配置值等等。&lt;br /&gt;
 SpringEL 能与 Spring 功能完美整合，给静态 Java 语言增加了动态功能。&lt;br /&gt;
&lt;br /&gt;
== SpEL 表达式 ==&lt;br /&gt;
 SpEL 基本表达式是由各种基础运算符、常量、变量引用一起进行组合所构成的表达式。&lt;br /&gt;
&lt;br /&gt;
SpEL 支持如下表达式：&lt;br /&gt;
# '''基本表达式'''：字面量表达式、关系，逻辑与算术运算表达式、字符串连接及截取表达式、三目运算及 Elivis 表达式、正则表达式、括号优先级表达式。&lt;br /&gt;
# '''类型表达式'''：类型访问、静态方法/属性访问、实例访问、实例属性值存取、实例属性导航、instanceof、变量定义及引用、赋值表达式、自定义函数等等。&lt;br /&gt;
# '''集合相关表达式'''：内联列表、内联数组、集合，字典访问、列表，字典，数组修改、集合投影、集合选择。&lt;br /&gt;
#* 不支持多维内联数组初始化；不支持内联字典定义；&lt;br /&gt;
# 其他表达式：'''模板表达式'''。【？？？】&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 大家知道，JSP 页面的表达式使用“'''${}'''”进行声明。而 SpringEL 表达式使用“'''#{}'''”进行声明。&lt;br /&gt;
一般来说，SpringEL 表达式使用 '''#{}''' 进行声明。但是，不是所有注解中的 SpringEL 表达式都需要 #{} 进行声明。&lt;br /&gt;
: 例如：&lt;br /&gt;
:* @Value 注解中的 SpringEL 表达式需要 #{} 进行声明；&lt;br /&gt;
:* 而 ExpressionParser.parseExpression 实例方法中的 SpringEL 表达式不需要 #{} 进行声明；&lt;br /&gt;
:* 另外，@CachePut 和 @Cacheable 等缓存注解中 key 属性值的 SpringEL 表达式，也不需要 #{} 进行声明。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SpEL 运算符 ==&lt;br /&gt;
SpEL 提供了以下基础运算符：&lt;br /&gt;
# '''算术运算符'''：加（+）、减（-）、乘（*）、除（/）、求余（%）、幂（^）、求余（MOD）和 除（DIV）等算术运算符。&lt;br /&gt;
#* “MOD”与“%”等价，“DIV”与“/”等价，并且不区分大小写。&lt;br /&gt;
#: 例如：“#{1+2*3/4-2}”、“#{2^3}”、“#{100 mod 9}”都是算术运算 SpEL 表达式。&lt;br /&gt;
# '''关系运算符'''：等于（==）、不等于（!=）、大于（&amp;gt;）、大于等于（&amp;gt;=）、小于（&amp;lt;）、小于等于（&amp;lt;=），区间（between）运算等等。&lt;br /&gt;
#: 例如：“#{2&amp;gt;3}”值为“false”。&lt;br /&gt;
# '''逻辑运算符'''：与（and）、或（or）、非（!或NOT）。&lt;br /&gt;
#* 与 Java 逻辑运算不同，SpEL 不支持“&amp;amp;&amp;amp;”和“||”。&lt;br /&gt;
#: 例如：“#{2&amp;gt;3 or 4&amp;gt;3}”值为“true”。&lt;br /&gt;
# '''字符串运算符'''：连接（+）和 截取（[ ]）。&lt;br /&gt;
#: 例如：“#{'Hello'+'World!'}”的结果为“Hello World!”；“#{'Hello World!'[0]}”截取第一个字符“H”，目前只支持获取一个字符。&lt;br /&gt;
# '''三目运算符'''：“逻辑表达式？表达式1：表达式2”（和 Java 一样的三目运算符）。&lt;br /&gt;
#: 例如：“#{3&amp;gt;4? 'Hello':'World'}”将返回“'World'”。&lt;br /&gt;
# '''正则表达式匹配符'''：'''matches'''。&lt;br /&gt;
#: 例如：“#{'123' matches'\\d{3}'}”将返回“true”。&lt;br /&gt;
# '''类型访问运算符'''：“'''T(Type)'''”。&lt;br /&gt;
#* “Type”表示某个 Java 类型，实际上对应于 Java 类 '''java.lang.Class''' 实例；&lt;br /&gt;
#* “Type”必须是类的'''全限定名'''（包括包名），但是核心包“java.lang”中的类除外。&lt;br /&gt;
#*: 例如：“T(String)”表示访问的是 java.lang.String 类；“#{T(String).valueOf(1)}”表示将整数 1 转换成字符串。&lt;br /&gt;
# '''变量引用符'''：“'''#'''”。&lt;br /&gt;
#* 在表达式中使用“#variableName”引用上下文变量。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 SpEL 提供了一个变量定义的上下文接口—— '''EvaluationContext'''，并且提供了标准的上下文实现—— '''StandardEvaluationContext'''。&lt;br /&gt;
 &lt;br /&gt;
 1、通过 EvaluationContext 接口的 setVariable(variableName,value) 方法，可以定义“上下文变量”，这些变量在表达式中采用“'''#variableName'''”的方式予以引用。&lt;br /&gt;
 2、在创建变量上下文 Context 实例时，还可以在构造器参数中设置一个 rootObject 作为根，可以使用“'''#root'''”引用根对象，也可以使用“'''#this'''”引用根对象。&lt;br /&gt;
&lt;br /&gt;
示例：&lt;br /&gt;
: 使用前面介绍的运算符定义几个 SpEL 表达式：&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
package com.crazymakercircle.redis.springJedis;&lt;br /&gt;
import com.crazymakercircle.util.Logger;&lt;br /&gt;
import lombok.Data;&lt;br /&gt;
import org.springframework.beans.factory.annotation.Value;&lt;br /&gt;
import org.springframework.expression.EvaluationContext;&lt;br /&gt;
import org.springframework.expression.ExpressionParser;&lt;br /&gt;
import org.springframework.expression.spel.standard.SpelExpressionParser;&lt;br /&gt;
import org.springframework.expression.spel.support.StandardEvaluationContext;&lt;br /&gt;
import org.springframework.stereotype.Component;&lt;br /&gt;
&lt;br /&gt;
@Component&lt;br /&gt;
@Data&lt;br /&gt;
public class SpElBean {&lt;br /&gt;
	/**&lt;br /&gt;
	* 算术运算符&lt;br /&gt;
	*/&lt;br /&gt;
	@Value(&amp;quot;#{10+2*3/4-2}&amp;quot;)&lt;br /&gt;
	private int algDemoValue;&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	* 字符串运算符&lt;br /&gt;
	*/&lt;br /&gt;
	@Value(&amp;quot;#{'Hello ' + 'World!'}&amp;quot;)&lt;br /&gt;
	private String stringConcatValue;&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	* 类型运算符&lt;br /&gt;
	*/&lt;br /&gt;
	@Value(&amp;quot;#{ T(java.lang.Math).random() * 100.0 }&amp;quot;)&lt;br /&gt;
	private int randomInt;&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	* 展示SpEl上下文变量&lt;br /&gt;
	*/&lt;br /&gt;
	public void showContextVar() {&lt;br /&gt;
		ExpressionParser parser = new SpelExpressionParser();&lt;br /&gt;
		EvaluationContext context = new StandardEvaluationContext();&lt;br /&gt;
		&lt;br /&gt;
		context.setVariable(&amp;quot;foo&amp;quot;, &amp;quot;bar&amp;quot;);&lt;br /&gt;
		String foo = parser.parseExpression(&amp;quot;#foo&amp;quot;).getValue(context, String.class);&lt;br /&gt;
		Logger.info(&amp;quot; foo:=&amp;quot;, foo);&lt;br /&gt;
		&lt;br /&gt;
		context = new StandardEvaluationContext(&amp;quot;I am root&amp;quot;);&lt;br /&gt;
		String root = parser.parseExpression(&amp;quot;#root&amp;quot;).getValue(context, String.class);&lt;br /&gt;
		Logger.info(&amp;quot; root:=&amp;quot;, root);&lt;br /&gt;
		&lt;br /&gt;
		String result3 = parser.parseExpression(&amp;quot;#this&amp;quot;).getValue(context, String.class);&lt;br /&gt;
		Logger.info(&amp;quot; this:=&amp;quot;, root);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: 测试用例如下：&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
package com.crazymakercircle.redis.springJedis;&lt;br /&gt;
//...&lt;br /&gt;
&lt;br /&gt;
public class SpringRedisTester {&lt;br /&gt;
	/**&lt;br /&gt;
	* 测试SpEl表达式&lt;br /&gt;
	*/&lt;br /&gt;
	@Test&lt;br /&gt;
	public void testSpElBean() {&lt;br /&gt;
		ApplicationContext ac = new ClassPathXmlApplicationContext(&amp;quot;classpath:spring-redis.xml&amp;quot;);&lt;br /&gt;
		SpElBean spElBean = (SpElBean)ac.getBean(&amp;quot;spElBean&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		* 演示算术运算符&lt;br /&gt;
		*/&lt;br /&gt;
		Logger.info(&amp;quot;spElBean.getAlgDemoValue():=&amp;quot;, spElBean.getAlgDemoValue());&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		* 演示字符串运算符&lt;br /&gt;
		*/&lt;br /&gt;
		Logger.info(&amp;quot;spElBean.getStringConcatValue():=&amp;quot;, spElBean.getStringConcatValue());&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		* 演示类型运算符&lt;br /&gt;
		*/&lt;br /&gt;
		Logger.info(&amp;quot;spElBean.getRandomInt():=&amp;quot;, spElBean.getRandomInt());&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		* 展示SpEL上下文变量&lt;br /&gt;
		*/&lt;br /&gt;
		spElBean.showContextVar();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 缓存注解中的 SpringEL 表达式 ==&lt;br /&gt;
* 参见：[http://wiki.eijux.com/Spring_%E7%9A%84_Redis%E7%BC%93%E5%AD%98%E6%B3%A8%E8%A7%A3#.E7.BC.93.E5.AD.98.E6.B3.A8.E8.A7.A3.E4.B8.AD.E7.9A.84_SpringEL_.E8.A1.A8.E8.BE.BE.E5.BC.8F Spring 的 Redis缓存注解：缓存注解中的 SpringEL 表达式]&lt;/div&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
</feed>