类型

你可以使用特殊的 T 运算符来指定 java.lang.Class 的实例(即类型)。静态方法也可以使用此运算符调用。StandardEvaluationContext 使用 TypeLocator 来查找类型,而 StandardTypeLocator(可以替换)构建时已理解 java.lang 包。这意味着 T()java.lang 包内类型的引用不需要完全限定,但所有其他类型引用必须完全限定。以下示例展示了如何使用 T 运算符

  • Java

  • Kotlin

Class dateClass = parser.parseExpression("T(java.util.Date)").getValue(Class.class);

Class stringClass = parser.parseExpression("T(String)").getValue(Class.class);

boolean trueValue = parser.parseExpression(
		"T(java.math.RoundingMode).CEILING < T(java.math.RoundingMode).FLOOR")
		.getValue(Boolean.class);
val dateClass = parser.parseExpression("T(java.util.Date)").getValue(Class::class.java)

val stringClass = parser.parseExpression("T(String)").getValue(Class::class.java)

val trueValue = parser.parseExpression(
		"T(java.math.RoundingMode).CEILING < T(java.math.RoundingMode).FLOOR")
		.getValue(Boolean::class.java)

如果你的应用或框架管理自己的 EvaluationContext,你可能需要手动使用特定的 ClassLoader 配置 StandardTypeLocator,以确保 SpEL 表达式解析器能够可靠地找到用户类型。

例如,spring-context 模块中的 StandardBeanExpressionResolver 使用对应 BeanFactory 的 Bean ClassLoader 配置了 StandardTypeLocator