类型

您可以使用特殊的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,您可能需要使用特定的ClassLoader手动配置StandardTypeLocator,以确保SpEL表达式解析器能够可靠地找到用户类型。

例如,spring-context模块中的StandardBeanExpressionResolver使用相应BeanFactory的beanClassLoader配置StandardTypeLocator