spring bean注入报空指针null,但set设值时对象是存在的,而且只是部分方法报空指针
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring bean注入报空指针null,但set设值时对象是存在的,而且只是部分方法报空指针相关的知识,希望对你有一定的参考价值。
这里打印costDao是有值的,不为空
这里前两个不为空,正常,但调用其他方法就报空指针,很郁闷!
这是部分bean配置
这是报错信息
百度了一天了,做了许多调整,没用,所以求助,谢谢各位提点下
两年前的问题了,都从学生走向工作岗位了~谢谢各位的回答,当时是在原有的框架基础上又整合spring的,出了问题~后来是新建项目,重新搭了一套ssh框架,没问题了~挺怀念当时坚持折腾捣鼓的自己的~
2、上面都说了错在哪了,你没看到,看异常的第一行,ICostServiceImpl类的48行?
3、空指针是最好找的问题,肯定是哪个引用指向了一个空的对象。
4、有调用方法的对象,看这个对象是不是空的,先看程序执行到哪了,action还是service,还是dao里,缩小范围,找到了哪层,看下是哪个变量还是对象为空。
5、你new了一个ICostServiceImpl这个类的对象,这个对象调用了getCost()方法,看下这个对象是不是空的,另外看下CostDetaiAction里的execute这个方法,现在action里找,再service。
6、耐心点,这个要一天。追问
我已经找到costDao为空 ,在第二个图片注释部分已经写出,我现在想知道为什么,调用48行的方法会报错,同样调用42行也会报错,现在是在原来的项目中加入spring框架,不是很熟练
追答1、CostDetaiAction的execute方法出错了,说明异常就在action-》service-》dao这一个流程中的某个位置。
2、你打印costDao,这是一个对象,打印肯定有值了,值好像是对象名@.....。
3、你确定startCost方法的costDao为空吗?你能不要打印对象?打印对象都是有值,打印里面 的属性好吧。再确认下,亲,打印测试千万别打印对象。
确定startCost方法的costDao为空,一涉及到那个方法就会报错,前面的service都测试过了,不空
一般dao的对象在service里面用到,你写在哪?你总说service没错,你的startCost方法在ICostServiceImpl里面被调用了,因为costDao你定义在了service里,而刚好为空,你说错在哪?
参考技术A 这个问题貌似和我的有点像,我也是空指针操作,但是我单独在对象工厂里运行main函数测试是完全可以输出的。最后找了半天是 我的bean.xml配置文件里的某两行的顺序写反了(Dog和Service),然后颠倒过来,发现程序好了。暂时还不知道深层次原因是什么。 参考技术B 这个是应为你struts中class名字与bean中class的名字不同,匹配不到,所以是空,,看看你JSP页面对应的struts2中action的class和beans中与之对应的class以上是关于spring bean注入报空指针null,但set设值时对象是存在的,而且只是部分方法报空指针的主要内容,如果未能解决你的问题,请参考以下文章
spring springboot websocket 不能注入( @Autowired ) service bean 报 null 错误