欲哭无泪的@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
【推荐】程序员问答平台,解决您开发中遇到的技术难题
|
||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|---|---|---|---|---|---|
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 +加关注
搜索
随笔分类
- ajax(1)
- amCharts(1)
- bae(1)
- bootstrap(1)
- cassandra(2)
- CSS(1)
- dubbo(1)
- eclipse(3)
- hibernate(4)
- httpclient(1)
- java(63)
- javaconfig(1)
- JavaScript(10)
- jquery(3)
- jsonp(1)
- jsp(9)
- linux(3)
- log4j(3)
- maven(4)
- metronic(1)
- mybatis(2)
- mysql(4)
- netty(3)
- nginx(1)
- nosql(1)
- oracle(1)
- plsql(1)
- python(1)
- resin(1)
- sae(3)
- servlet(1)
- shiro(1)
- spring(22)
- tomcat(1)
- vmware(1)
- xshell(2)
- 闲谈(2)
随笔档案
- 2018年8月 (1)
- 2018年6月 (1)
- 2018年5月 (1)
- 2018年2月 (3)
- 2018年1月 (2)
- 2017年11月 (1)
- 2017年9月 (1)
- 2017年7月 (1)
- 2017年3月 (1)
- 2016年12月 (2)
- 2016年11月 (1)
- 2016年10月 (1)
- 2016年7月 (3)
- 2016年6月 (1)
- 2016年5月 (2)
- 2016年4月 (1)
- 2016年3月 (3)
- 2016年2月 (4)
- 2015年12月 (2)
- 2015年11月 (7)
- 2015年10月 (2)
- 2015年9月 (3)
- 2015年8月 (2)
- 2015年7月 (6)
- 2015年6月 (3)
- 2015年5月 (2)
- 2015年4月 (1)
- 2015年3月 (6)
- 2015年2月 (7)
- 2015年1月 (2)
最新评论
- 1. Re:Spring @Scheduled @Async联合实现调度任务(2017.11.28更新)
- 经过实际测试,已经会出现任务重复并发执行的问题,改成加锁的方式即可了。第一个线程执行完,第二个才开发执行,符合加锁的场景。
但是也要考虑到,实际生产中,是很少会出现这种情况的。 - --帅先勃
- 2. Re:浅谈Java泛型之<? extends T>和<? super T>的区别
- 谢谢提示~!
- --lllunaticer
- 3. Re:浅谈Service层为何要有接口
- @1366401209引用Spring无论是AOP还是事务管理的实现基于JDK的动态代理的没用cglib时,因动态代理的实现依赖于接口,所以必须有接口的定义才能使用这些功能虽然这是事实,但其他如果为了......
- --暮夜望日
- 4. Re:mybatis的#{}和${}的区别以及order by注入问题
- 感谢,您的文章解决了我的实际问题
- --恒宝乐园
- 5. Re:浅谈Java泛型之<? extends T>和<? super T>的区别
- 优秀
- --sdlkfjlsdkfj
阅读排行榜
- 1. 欲哭无泪的@Autowired注入对象为NULL(33940)
- 2. Hibernate4中使用getCurrentSession报Could not obtain transaction-synchronized Session for current thread(28368)
- 3. 浅谈Java泛型之<? extends T>和<? super T>的区别(14338)
- 4. 不懂前端的程序员不是好美工——UI框架metronic使用教程——程序员视角(13871)
- 5. Spring中常用类型的bean配置(Map,List,Set,基本类型)(8220)
评论排行榜
- 1. 浅谈Service层为何要有接口(5)
- 2. Hibernate4中使用getCurrentSession报Could not obtain transaction-synchronized Session for current thread(5)
- 3. @Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml(3)
- 4. 浅谈Java泛型之<? extends T>和<? super T>的区别(3)
- 5. JavaScript的函数重载(2)