升级SpringBoot 3.2.0遇SpelEvaluationException:EL1005E类型找不到问题求助
解决SpringBoot 3.2.0升级后SpelEvaluationException: EL1005E问题
问题概述
升级SpringBoot至3.2.0版本后,出现SpelEvaluationException: EL1005E: Type cannot be found错误,该问题曾在旧版本中修复,此次升级后复现。
报错详情
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1005E: Type cannot be found 'co.lib.util.FaceUtils' at org.springframework.expression.spel.support.StandardTypeLocator.findType(StandardTypeLocator.java:128) at org.springframework.expression.spel.ExpressionState.findType(ExpressionState.java:181) at org.springframework.expression.spel.ast.TypeReference.getValueInternal(TypeReference.java:70) at org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:61) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:97) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:114) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:273) at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:167)
可疑代码片段
class FaceState { @Value("#{T(co.FaceUtils).parseDate('${git.commit.time:}')}") private CommitDateTime commitTime; }
解决指引
- 校验全类名一致性:报错提示找不到
co.lib.util.FaceUtils,但代码中写的是co.FaceUtils,先确认FaceUtils的实际全限定名,修正SpEL表达式T()中的路径,保证与实际类的包路径完全匹配。 - 确认类的可访问性:确保
FaceUtils是public修饰的类,且处于Spring组件扫描的范围内;如果是内部类,必须是静态内部类才能被SpEL识别。 - 适配SpringBoot 3.2的类加载变化:SpringBoot 3.2对类加载机制有调整,若项目使用JPMS模块化,需检查模块配置
module-info.java,确保该类所在模块已正确导出,或者授予Spring相关模块访问权限。 - 自定义SpEL类型定位策略:可以通过配置类自定义
StandardTypeLocator,指定正确的类加载器,或者替换BeanExpressionResolver,确保SpEL能定位到目标类。示例代码如下:@Configuration public class SpelConfig { @Bean public StandardBeanExpressionResolver beanExpressionResolver() { StandardBeanExpressionResolver resolver = new StandardBeanExpressionResolver(); StandardTypeLocator typeLocator = new StandardTypeLocator(FaceUtils.class.getClassLoader()); resolver.setTypeLocator(typeLocator); return resolver; } } - 临时降级或等待官方修复:若确认是SpringBoot 3.2.0的回归bug,可暂时降级到3.1.x稳定版本,同时关注Spring官方的issue追踪,等待官方发布修复补丁。
内容的提问来源于stack exchange,提问作者francissoria
相关产品推荐
相关产品推荐

