类型

您可以使用特殊的 T 运算符来指定 java.lang.Class 的实例(即类型)。静态方法也通过使用此运算符来调用。StandardEvaluationContext 使用 TypeLocator 来查找类型,而 StandardTypeLocator(可以被替换)是基于对 java.lang 包的理解构建的。这意味着对 java.lang 包中的类型的 T() 引用不需要完全限定,但所有其他类型引用都必须完全限定。以下示例展示了如何使用 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,您可能需要手动配置一个具有特定 ClassLoaderStandardTypeLocator,以确保 SpEL 表达式解析器能够可靠地定位用户类型。

例如,spring-context 模块中的 StandardBeanExpressionResolver 使用相应 BeanFactory 的 bean ClassLoader 配置了一个 StandardTypeLocator

© . This site is unofficial and not affiliated with VMware.