欲哭无泪啊...一下午的时间就这么被浪费了...一个基于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的更多相关文章

  1. 在Springmvc普通类@Autowired注入request为null解决方法

    在Springmvc普通类@Autowired注入request为null解决方法   在类中加入以下注入request对象的代码,运行时发现request为null,注入失败.在@Controlle ...

  2. Spring中注入对象为NULL

    Java工程报错, java.lang.reflect.InvocationTargetException,网上搜索过后,发现是注入错误,通过调试发现,具体报错位置是某个dao层对象为null,进而引 ...

  3. intellij idea中去除@Autowired注入对象的红色波浪线提示

    idea中通过@Autowired注入的对象一直有下划线提示. 解决:改变@Autowired的检查级别即可. 快捷键:Ctrl+Alt+s,进入idea设置界面,输入inspections检索

  4. intellij idea中去除@Autowired注入对象带来的下划线提示

    场景: idea中通过@Autowired注入的对象一直有下划线提示,虽然不影响运行 解决:改变@Autowired的检查级别即可. 快捷键:Ctrl+Alt+s,进入idea设置界面,输入inspe ...

  5. spring @Autowired注入对象,在构造方法中为null问题

    出现问题的代码如下: @Service public class BaseHttpServiceImpl implements BaseHttpClient { private final stati ...

  6. 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法

    最近使用SpringBoot的自定义拦截器,在拦截器中注入了一个DAO,准备下面作相应操作,拦截器代码: public class TokenInterceptor implements Handle ...

  7. Spring Autowired 注入失败总是Null

    报错:NullPointerException 分析:错误原因是注入失败? <context:annotation-config/> <context:component-scan ...

  8. new出来的对象无法调用@Autowired注入的Spring Bean

    @Autowired注入Spring Bean,则当前类必须也是Spring Bean才能调用它,不能用new xxx()来获得对象,这种方式获得的对象无法调用@Autowired注入的Bean. 1 ...

  9. Java 各级注解及@Autowired注入为null解决办法

    1.@controller 控制器 用于标注控制层,相当于struts中的action层. 2.@service 服务层 用于标注服务层,主要用来进行业务的逻辑处理. 3.@repository DA ...

随机推荐

  1. Python中类的定义

    class Student(object): # 有点类似其它高级语言的构造函数 def __init__(self,name,score): self.name = name self.score ...

  2. C# 中几个小“陷阱”

    每天写代码,偶尔就会有让你抓狂的时候:代码改了千百遍,蓦然回首,Bug就在灯火阑珊处……这里就列举一些容易犯错的几个小地方,以后遇到了其他的,再慢慢添加.   1. 获取程序当前运行路径   情景复现 ...

  3. Code First :使用Entity. Framework编程(4) ----转发 收藏

    第4章 对关系使用默认规则与配置 在第3章,你已经掌握了默认规则与配置对属性以及其在数据库映射的字段的影响.在本章,我们把焦点放在类之间的关系上面.这包括类在内存如何关联,还有数据库中的外键维持等.你 ...

  4. Delphi 时间耗时统计

    处理事情: 数据处理过程中,速度很慢,无法准确定位分析是DB问题还是客户端处理问题,所以增加计时统计日志: Delphi计时首次使用,查阅资料,予以记录: var BgPoint, EdPoind: ...

  5. VMware虚拟机无法访问外网

    1.环境条件 2.VMware检查 3.虚拟机检查 1) vi /etc/sysconfig/network ----------------------------- NETWORKING=yes ...

  6. 一次失败的APP业务渗透测试

    作者:whoamiecho 来源:ichunqiu 本文参加i春秋社区原创文章奖励计划,未经许可禁止转载! 一.  过程 1.1.事情起因:暴力破解 测试给了个普通用户账号,可以登录.APP一来就要登 ...

  7. android tools使用方式

    我们希望在布局中显示测试的属性,而这个属性不会影响到正式代码,因此我们就需要tools这个命名空间. 首先定义:xmlns:tools="http://schemas.android.com ...

  8. Android中利用ViewHolder优化自定义Adapter的典型写法

    利用ViewHolder优化自定义Adapter的典型写法 最近写Adapter写得多了,慢慢就熟悉了. 用ViewHolder,主要是进行一些性能优化,减少一些不必要的重复操作.(WXD同学教我的. ...

  9. CAGradientLayer渐变效果

    属性 startPoint和endPoint 决定渐变方向,以单位坐标系定义.左上角{0,0},右下角{1,1} colors 渐变的颜色,是一个CGColorRef的数组. locations 定义 ...

  10. android事件分发机制

    android事件分发机制,给控件设置ontouch监听事件,当ontouch返回true时,他就不会走onTouchEvent方法,要想走onTouchEvent方法只需要返回ontouch返回fa ...