报错信息为:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
我的解决方法:在类上添加@Service注解
原因为:我在一个工具类中引用了dao层的方法,添加了@Autowired,还是报了上面 的错误。
分析:
很熟悉的一个错误,空指针,但是出现这个错误的原因却是有各种花样,有的是因为传参为空,有的是因为查询的接口为空等等都可能导致这个问题,但是我今天在遇到这个错误后,在排除了各种之前所遇到的空指针的错误之后,我崩溃了。。。所有的原因都不对,所以我决定找度娘问个清楚。不出我所料度娘告诉我:小伙子,这个问题啊,需要你动用自己聪明的大脑袋去解决哟!。。。,但是,天无绝人之路,度娘告诉我和@Autowired注解有关,这一下子激发了我那聪明又多发的大脑袋,于是乎如神来之笔一般我在此类上加上了@Service注解,紧接着问题就得以解决了。哈哈哈。
好了,说点正经的,遇到这个问题时我的确以为是空指针的错误,但是仔细的那么一看一排查,发现此事并非那么简单。
Spring MVC具有一个依赖注入的优点,可以通过org.springframework.beans.factory.annotation.Autowired注解类型将依赖注入一个属性(成员变量)或方法
在Spring MVC中,为了能被作为依赖注入,类必须使用org.springframework.stereotype.Service注解类型注明为@Service(一个服务)。另外,还需要在配置文件中使用<context:component-scan base-package="基本包"/>元素来扫描依赖基本包。(引用https://blog.csdn.net/qq_25819725/article/details/79878421)。
由此得出光用@Autowired将依赖注入是远远不够滴,我们还需要@Service的配合来将此类注册到spring容器中,这样才能被扫描到。
还有,我出现这个问题的究极原因是,我是在一个工具类中出现的此问题。。。唉!一言难尽啊。
最后一个事情,如果你遇到的错误真的由于参数或结果为空的情况导致的,请忽略我这些废话,赶紧的去排查你的参数和结果集。
这是我出现这个问题后的解决方式与理解,还是没理解到一个更深的层次,如有理解出错的地方,还请大佬们留言指出,欢迎留言。加油,奥~~~li~~给~