欲哭无泪的@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注入,否则之后的注入就会失败..
欲哭无泪的@Autowired注入对象为NULL的更多相关文章
- 在Springmvc普通类@Autowired注入request为null解决方法
在Springmvc普通类@Autowired注入request为null解决方法 在类中加入以下注入request对象的代码,运行时发现request为null,注入失败.在@Controlle ...
- Spring中注入对象为NULL
Java工程报错, java.lang.reflect.InvocationTargetException,网上搜索过后,发现是注入错误,通过调试发现,具体报错位置是某个dao层对象为null,进而引 ...
- intellij idea中去除@Autowired注入对象的红色波浪线提示
idea中通过@Autowired注入的对象一直有下划线提示. 解决:改变@Autowired的检查级别即可. 快捷键:Ctrl+Alt+s,进入idea设置界面,输入inspections检索
- intellij idea中去除@Autowired注入对象带来的下划线提示
场景: idea中通过@Autowired注入的对象一直有下划线提示,虽然不影响运行 解决:改变@Autowired的检查级别即可. 快捷键:Ctrl+Alt+s,进入idea设置界面,输入inspe ...
- spring @Autowired注入对象,在构造方法中为null问题
出现问题的代码如下: @Service public class BaseHttpServiceImpl implements BaseHttpClient { private final stati ...
- 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
最近使用SpringBoot的自定义拦截器,在拦截器中注入了一个DAO,准备下面作相应操作,拦截器代码: public class TokenInterceptor implements Handle ...
- Spring Autowired 注入失败总是Null
报错:NullPointerException 分析:错误原因是注入失败? <context:annotation-config/> <context:component-scan ...
- new出来的对象无法调用@Autowired注入的Spring Bean
@Autowired注入Spring Bean,则当前类必须也是Spring Bean才能调用它,不能用new xxx()来获得对象,这种方式获得的对象无法调用@Autowired注入的Bean. 1 ...
- Java 各级注解及@Autowired注入为null解决办法
1.@controller 控制器 用于标注控制层,相当于struts中的action层. 2.@service 服务层 用于标注服务层,主要用来进行业务的逻辑处理. 3.@repository DA ...
随机推荐
- servlet的开发流程介绍
servlet的开发部署流程 1.在%TOMCAT_HOME%/webapps下WEB-INF的文件夹,写一个文件web.xml(该网站的配置信息),建立一个classes的子文件夹,也可以从别的目录 ...
- Hibernate框架(未完待续······)
作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编 ...
- Spring4学习笔记2-配置Bean
1.配置bean 配置形式:Xml和注解方式 Bean的配置方式:通过全类名(反射).工厂.FactoryBean 1.1 id必须唯一 2 Spring提供两种类型的IOC容器的实现 BeanFac ...
- 粒子动画Particleground.js
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 网站开发中很实用的 HTML5 & jQuery 插件
这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...
- 【移动适配】移动Web怎么做屏幕适配(一)
屏幕适配是一个很容易被忽略的问题,但对于精益求精的产品而言,是必不可少的.对于Web开发的求职者而言,也是一个必需要理解清楚的经典问题 首发于微信公众号(啃先生) 壹 | Fisrt 移动端适配的是 ...
- 解决ReSharper自动删除换行
使用Devexpress+ReSharper进行开发,似乎是C/S开发的最佳搭配. 但在ReSharper使用时,发现一个非常烦人的问题:即按F5进行调试时,自动删除换行,这样不仅把代码搞乱了,而且有 ...
- 在Kali Linux下安装与配置OpenVas
以下是我的Kali版本号: 执行安装命令: apt-get install openvas 安装完成后可以在漏洞分析菜单下查看到OpenVas相关选项. 以下为安装完成后需要用到的几个命令: open ...
- CentOS5.5挂载本地ISO镜像
操作步骤: 一.挂载iso文件到挂载点 [root@server ~ ]# mount -o loop /mnt/iso/CentOS5.iso /mnt/cdrom 二.查看挂载状态 [root@ ...
- YYText-显示富文本
github地址: https://github.com/ibireme/YYText CocoaPods安装: pod 'YYText' 1.YYLabel使用注意 private lazy var ...