Cannot invoke “com.atguigu.service.impl.EmployeeServiceImpl.queryList()”

Request processing failed: java.lang.NullPointerException: Cannot invoke “com.atguigu.service.EmployeeService.queryList()” because “this.employeeServiceImpl” is null

在整合ssm项目时,发现如下异常:

在这里插入图片描述报错原因是controller层在调用service层时,发现service是空,找不到对应的Bean组件。说明问题肯定出现在controller层和service层,空指针异常问题一般都是找不到对应的组件,说明组件存放到IoC容器时出现了问题。
分别检查controller层和service层的代码,是否注解出现问题:
在这里插入图片描述
在这里插入图片描述
发现该放入IoC容器的都已经放进去了,按理说不应该有问题,于是考虑是不是因为:虽然组件放进IoC容器,但是没有命名,controller层找不到具体的组件呢?但是@Resource注解在效果上就等同于@Autowired+@Qualifier,应该不存在上述问题,很疑惑!!!
抱着试试看的心理,把所有的@Resource注解替换成了@Autowired注解:
在这里插入图片描述发现竟然问题解决了!
深入研究一下:

为什么将控制层和业务层的@Resource注解替换成@Autowired注解后,就不报错了,按理说@Resource注解不是更好吗?

  1. @Resource和@Autowired注解的区别:
    • 简单区别:pass
    • 真正区别:
      @Autowired注解默认按类型进行注入的,结合@Qualifier注解才是按名称进行注入
      @Resource注解默认是按名称来进行注入的
  2. 失败原因:
    @Resource按默认名称进行注入,如果Spring上下文中没有与字段名称匹配的bean,注入会失败,导致该字段保持为“null”,也就是说:你的字段名称是service,而Spring上下文中没有一个bean的名称是service,则注入会失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值