语言参考 (Language Reference)
本节介绍 Spring 表达式语言的工作原理。
章节摘要
- 字面量表达式 (Literal Expressions)
- 属性、数组、列表、Map 和索引器 (Properties, Arrays, Lists, Maps, and Indexers)
- 内联列表 (Inline Lists)
- 内联 Map (Inline Maps)
- 数组构造 (Array Construction)
- 方法 (Methods)
- 运算符 (Operators)
- 类型 (Types)
- 构造函数 (Constructors)
- 变量 (Variables)
- 函数 (Functions)
- 可变参数调用 (Varargs Invocations)
- Bean 引用 (Bean References)
- 三元运算符 (Ternary Operator)
- Elvis 运算符 (The Elvis Operator)
- 安全导航运算符 (Safe Navigation Operator)
- 集合选择 (Collection Selection)
- 集合投影 (Collection Projection)
- 表达式模板 (Expression Templating)
补充教学
1. 为什么 SpEL 如此重要?
SpEL 不仅仅是一个简单的字符串解析工具,它是 Spring 框架的“胶水”。它允许你在配置(XML 或注解)中使用动态逻辑。
- 解耦:你可以在不修改代码的情况下,通过修改配置文件中的表达式来改变运行行为。
- 灵活性:支持几乎所有的 Java 特性(方法调用、构造、逻辑运算等),使得配置具有了编程的能力。
2. 学习路径建议
由于语言参考内容非常丰富,建议按照以下优先级进行学习:
- 核心基础:字面量、属性访问、索引器(最常用的
@Value场景)。 - 增强安全:安全导航运算符 (
?.)。这是解决NullPointerException的利器,面试中经常提及。 - 集合神器:集合投影 (
![]) 和 集合选择 (?[])。在处理列表数据时,它们能让你的代码从几行循环简写为一行表达式。 - 特殊符号:Elvis 运算符 (
?:)。它是三元运算符的简写形式,用于提供默认值。
3. SpEL 与 OGNL 的区别
如果你以前用过 Struts2,可能熟悉 OGNL。
- SpEL 的语法在很多方面与 OGNL 相似,但 SpEL 是原生集成在 Spring 容器中的,能够直接访问 Spring 管理的 Bean(使用
@beanName语法)。 - SpEL 拥有更好的性能,特别是在开启了编译模式(Compiled Mode)的情况下。