渐渐模糊了约定 2024-07-10 15:26 采纳率: 17.4%
浏览 20
已结题

Cannot invoke "x" because "this.configMapper" is null


@Resource
    private ConfigService configService = new ConfigServiceImpl();

映射为空

img

这个mapper在Controller中是可以正常用的:

@RestController
@RequestMapping("/log")
public class LogErrorApiController {
    @Resource
    private LogService logService = new LogServiceImpl();
}

但是我在外部写了一个工具类,在工具类中访问,提示mapper为空:

img

public class Utils {
    @Resource
    private ConfigService configService = new ConfigServiceImpl();
    public String lineStatFormat(List<ConfigLinesStations> linesStations){
        String opList = "";
        for (int i = 0; i < linesStations.size(); i++) {
            List<ConfigEquipment> equipments = configService.getEquipmentList("and EquipmentId = "+
                    linesStations.get(i).getOPid());
            System.out.println(equipments.get(0));
            opList += linesStations.get(i).getOPcode()+" 【"+
                    equipments.get(0).getEquipmentName()+"】";
            if (i < linesStations.size()){
                opList += " ——>";
            }
        }
        return opList;
    }
}

运行起来就报了这么个错:

img

尝试过加了组件扫描,也没有用:

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-10 15:26
    关注

    引自免费微信小程序:皆我百晓生

    根据你提供的错误信息,问题似乎在于你在工具类 Utils 中尝试注入 ConfigService,然后调用其 getEquipmentList 方法,但是 ConfigService 中的 configMapper 成员变量为 null。这说明 configMapper 没有被成功注入。

    这个问题通常出现在 Spring 无法管理你的 bean 的时候。对于这个问题,我建议你按照以下步骤来解决:

    1. 使用 @Autowired 而不是 @Resource:尽管 @Resource@Autowired 都可以用来自动注入 bean,但 @Autowired 是 Spring 的注解,而 @Resource 是 Java 的注解。在 Spring 中,通常推荐使用 @Autowired。尝试将你的代码中的 @Resource 替换为 @Autowired
    2. 确保 Mapper 接口被 Spring 扫描到:确保你的 ConfigMapper 接口位于 Spring 扫描的包或者其子包中。如果不在,Spring 无法找到并注入这个接口。你可以在 Spring Boot 的主类上使用 @ComponentScan 注解来指定要扫描的包。
    3. 检查配置:确保你的数据库配置是正确的,包括数据源、驱动等。有时候配置错误可能导致 bean 无法正确初始化,从而导致 configMapper 为 null。
    4. 检查依赖注入:确保 ConfigServiceConfigMapper 的依赖注入是正确的。检查 ConfigService 是否正确地注入了 ConfigMapper。如果 ConfigService 中的 configMapper 为 null,那么当你尝试调用其方法时就会抛出异常。
    5. 使用构造函数注入:尝试将依赖注入的方式改为构造函数注入。有时候,使用构造函数注入可以解决某些依赖注入的问题。

    这是根据你提供的信息给出的建议。如果这些建议不能解决你的问题,请提供更多关于你的项目结构、配置和代码的详细信息,以便我能更准确地帮助你解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月30日
  • 创建了问题 7月10日

悬赏问题

  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?
  • ¥50 libwebsockets 如何添加其他socket事件回调
  • ¥50 实现画布拖拽算子排布,通过flink实现算子编排计算,请提供思路