星空网 > 软件开发 > Java

欲哭无泪的@Autowired注入对象为NULL

欲哭无泪啊...一下午的时间就这么被浪费了...一个基于spring mvc和spring data jpa的小项目,当我写完一个controller的测试用例后,一运行却报空指针,跟了下是一个dao为null.然后看一下这个dao的代码:

@Component@Transactionalpublic class XXService {    private Logger logger = LoggerFactory.getLogger(getClass());    @Autowired  private XXDao xxDao;     public void add(XX xxl) {        logger.debug("进入XXService.add(XX xx)方法");    xxDao.save(xx); //此处报空指针,原因是xxDao为null
}

一开始我都没认为这个xxDao会是null,以为是参数有问题,然而断点跟了一下发现不仅参数没问题,程序整体过程中都没有任何不对劲的地方,只有运行到这个dao才报错..因为这个dao是jpa自动实现的,我就想当然的认为可能是参数或是映射问题导致的生成实现的过程中出现问题,不过现在想想,虽然自动实现dao的过程可能失败,但是不应该报空指针.百度了一圈,看到个关于@Autowired注入失败的帖子,此时才想到可能是dao注入失败了,再跟一遍代码,的确这里dao没有注入jpa生成的实现,直接就是个null.这我就有点无解了,别又是spring的什么bug或是jar包冲突,这还怎么玩?当年学spring的时候就遇到过各种奇葩问题,写错的代码却得到正确结果,写对的代码却因为各种原因一直报错..

虽然有点无解,但是原帖中有人提过要在所有使用dao的地方包括service都需要@Autowired注入,否则就会失效,那么我检查一下吧,虽然不报希望,因为这段代码是我们leader写了一半的时候我接着写的,犯错的概率很小的.话虽这么说,但是看到了如下这段代码:

@RestController@RequestMapping(value = "/xxx/xx")public class XXController {  Logger logger = LoggerFactory.getLogger(getClass());    private XXService xxService = new XXService();   .....}

我当时就倒了...这里忘了注入也就算了,然而还直接new了一个对象,这样调用service的时候也不报错...然后dao层注入直接失败..

这里印证了之前看到的那个帖子中的观点:必须在所有使用了dao的地方,包括调用它的servcie都要进行@Autowired注入,否则之后的注入就会失败..




原标题:欲哭无泪的@Autowired注入对象为NULL

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

欧盟能源标签是什么样的?如何获得EPREL标签?:https://www.kjdsnews.com/a/1310713.html
外贸公司网站建设(外贸网站建设 google):https://www.kjdsnews.com/a/1310714.html
外贸网站优化推广(外贸seo搜索优化怎么做):https://www.kjdsnews.com/a/1310715.html
亚马逊、速卖通流量来源方式,通过测评干预流量需具备哪些条件:https://www.kjdsnews.com/a/1310716.html
一人可顶团队,ChatGPT“带飞”多家跨境公司!:https://www.kjdsnews.com/a/1310717.html
日本JCT重要更新!附热门问题答疑:https://www.kjdsnews.com/a/1310718.html
TikTok 将推出先买后付服务 :https://www.kjdsnews.com/a/1836651.html
TikTok 将推出先买后付服务 :https://www.goluckyvip.com/news/188219.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流