今天在完成Spring项目的时候遇到了一个类似于下面的异常:
10.03.2010 13:53:53 org.apache.catalina.core.StandardWrapperValve invoke SCHWERWIEGEND: Servlet.service() for servlet default threw exception org.springframework.expression.spel.SpelEvaluationException: EL1005E:(pos 0): Type cannot be found 'com.example.Comparison.Operator' at org.springframework.expression.spel.support.StandardTypeLocator.findType(StandardTypeLocator.java:79) at org.springframework.expression.spel.ExpressionState.findType(ExpressionState.java:136) at org.springframework.expression.spel.ast.TypeReference.getValueInternal(TypeReference.java:45) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:52) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:93) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:88) at org.springframework.web.servlet.tags.EvalTag.doEndTag(EvalTag.java:118)
大致描述一下场景:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <util:map id="contractQueryStrategyHolder"> <entry key="#{T(com.example.Comparison.Operator).xxx}" value-ref="bbbb" /> </util:map> </beans>
Operator
为Comparison
的内部类。后来启动失败就出现上面的异常。解决方案其实很简单,只需要把配置修改为下面的就好:
<util:map id="contractQueryStrategyHolder"> <entry key="#{T(com.example.Comparison$Operator).xxx}" value-ref="bbbb" /> </util:map>
==============================================================================