You need to enable JavaScript to run this app. 升级Vaadin 20时SpringLookupInitializer.createLookup出现NPE问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

升级Vaadin 20时SpringLookupInitializer.createLookup出现NPE问题咨询

移除空检查逻辑的原因

Vaadin官方团队删除该兼容分支的核心出发点是简化实现,他们默认认为符合Spring规范的应用中,ApplicationContext完成初始化后一定会被绑定到ServletContext属性中,WebApplicationContextUtils可以直接拿到有效值,原有的空检查降级逻辑属于针对早期Spring版本异常场景的临时兼容代码,在后续Spring版本上下文初始化时序已经稳定的前提下,就直接移除了该分支,并没有考虑到纯Spring MVC(非Spring Boot)场景下,用户自定义初始化顺序可能导致上下文绑定晚于Vaadin初始化的情况。

可用解决方案
  • 方案1:自定义实现覆盖默认初始化逻辑
    自行编写一个继承SpringLookupInitializer的自定义类,将12.4.0版本中带空检查的getApplicationContext方法加回,之后通过Java SPI注册该自定义实现,设置优先级高于Vaadin默认的初始化器,启动时就会走你自己加的兼容逻辑,完全复现旧版本的正常运行效果。
  • 方案2:调整初始化时序保证上下文提前绑定
    如果是xml配置的Spring MVC项目,调整web.xml中配置顺序,确保ContextLoaderListener的注册顺序在Vaadin Servlet之前;如果是注解配置的项目,给Vaadin Servlet的Bean添加@DependsOn("webApplicationContext")注解,强制Spring上下文初始化完成后再初始化Vaadin相关组件,保证WebApplicationContextUtils取到的上下文不为空。
  • 方案3:临时版本锁定兼容
    不需要修改代码的前提下,直接锁定spring-vaadin依赖为12.4.0版本即可,该版本和Vaadin 20的核心功能完全兼容,没有冲突,可以正常运行,待后续Vaadin官方修复该回归问题后再升级对应依赖即可。

内容的提问来源于stack exchange,提问作者Doug Yachera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 17:06:10