You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring初始化baseController bean失败抛出java.lang.NullPointerException问题求助

空指针异常原因
  • 核心问题出在Bean初始化顺序冲突:@PostConstruct 注解的方法会在当前类的依赖注入完成后立刻执行,此时Spring上下文还未完全初始化完成,HomeServiceIml 内部依赖的组件(比如数据层Mapper、数据库连接池等)可能还没完成注入和初始化,调用GetDataMenus方法时用到这些未初始化的属性就会抛出空指针。
  • 次要问题:BaseController 加了@Controller注解,它的子类HomeController也加了@Controller注解,Spring会同时创建父子类两个控制器Bean,触发两次@PostConstruct执行,进一步提高了初始化冲突的概率。
  • 额外可能:HomeServiceIml 的GetDataMenus方法33行本身存在未判空的逻辑,比如直接访问空对象的属性或方法。
修复方案
  1. 移除BaseController上的@Controller注解,它仅作为公共父类使用,不需要被Spring单独实例化:
// 去掉@Controller注解
public class BaseController {
    @Autowired
    protected HomeServiceIml _homeService;
    // 移除@PostConstruct的Init方法,不要在这里注入公共视图数据
}
  1. 改用Spring官方推荐的@ControllerAdvice + @ModelAttribute方案注入全局公共视图属性,替代原来的_mvShare方案,避免初始化顺序问题:
@ControllerAdvice
public class GlobalViewDataConfig {
    @Autowired
    private HomeServiceIml _homeService;

    // 该属性会自动注入到所有控制器的视图中,视图层直接使用menus变量即可
    @ModelAttribute("menus")
    public List<Menu> initMenus() { // 替换返回值为你实际的菜单数据类型
        return _homeService.GetDataMenus();
    }
}
  1. 检查HomeServiceIml类GetDataMenus方法第33行的代码,对所有可能为空的对象增加判空逻辑,同时确认该Service内部依赖的所有组件都已经正确添加了注入注解(比如@Autowired、@Resource)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:24:03