类型

您可以使用特殊的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的beanClassLoaderStandardTypeLocator