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

·  阅读 650
原文链接: www.cnblogs.com
蓝萝卜blu

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

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

@Component
@Transactional
public 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注入,否则之后的注入就会失败..

posted on 2015-07-17 19:24 蓝萝卜blu 阅读(33942) 评论(1) 编辑 收藏

评论

#1楼42088932019/3/21 9:44:09 2019-03-21 09:44 kasauce  

666 支持(0)反对(0)http://pic.cnblogs.com/face/868031/20151230135202.png    刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录注册访问网站首页。 【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码
【前端】SpreadJS表格控件,可嵌入系统开发的在线Excel
【推荐】程序员问答平台,解决您开发中遇到的技术难题
< 2019年6月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6

导航

公告

昵称:蓝萝卜blu
园龄:4年6个月
粉丝:8
关注:0 +加关注

搜索

   

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜

分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改