对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

Elvis 运算符

Elvis 运算符是三元运算符语法的简化形式,用于 Groovy 语言中。 使用三元运算符语法时,通常需要重复一个变量两次,如下例所示:spring-doc.cadn.net.cn

String name = "Elvis Presley";
String displayName = (name != null ? name : "Unknown");

相反,你可以使用 Elvis 运算符(因其形状类似于埃尔维斯的发型而得名)。 下面的例子展示了如何使用 Elvis 运算符:spring-doc.cadn.net.cn

ExpressionParser parser = new SpelExpressionParser();

String name = parser.parseExpression("name?:'Unknown'").getValue(new Inventor(), String.class);
System.out.println(name);  // 'Unknown'
val parser = SpelExpressionParser()

val name = parser.parseExpression("name?:'Unknown'").getValue(Inventor(), String::class.java)
println(name)  // 'Unknown'

下面的列表显示了一个更复杂的示例:spring-doc.cadn.net.cn

ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();

Inventor tesla = new Inventor("Nikola Tesla", "Serbian");
String name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name);  // Nikola Tesla

tesla.setName(null);
name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name);  // Elvis Presley
val parser = SpelExpressionParser()
val context = SimpleEvaluationContext.forReadOnlyDataBinding().build()

val tesla = Inventor("Nikola Tesla", "Serbian")
var name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name)  // Nikola Tesla

tesla.setName(null)
name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name)  // Elvis Presley

您可以使用 Elvis 运算符在表达式中应用默认值。下面的示例显示了如何在 @Value 表达式中使用 Elvis 运算符:spring-doc.cadn.net.cn

@Value("#{systemProperties['pop3.port'] ?: 25}")

如果已定义系统属性,则会注入系统属性 pop3.port,否则注入 25。spring-doc.cadn.net.cn