Spring new对象时注解失效

一、背景

今天在写代码时,有一个类:

public class StoreInfoTool{

@Resource

QAAssistantTool qaAssistantTool;

public void run(){

        qaAssistantTool.search(xx);

}

}

执行时报错,提示qaAssistantTool为空。

然后就发现很奇怪,qaAssistantTool为什么注入失败了,在专门测试QAAssistantTool的用例里面,qaAssistantTool明明是成功的。

接着查看StoreInfoTool的实例,是由new生成的,也就是说不是由spring管理的实例。

结论:Spring中new对象时注解失败。

二、原理剖析

参考:

https://www.cnblogs.com/xbq8080/p/spring.html

spring创建对象是在类加载时就已经通过spring容器创建成功了,用new关键字new出来的对象,jvm会重新分配对应的空间和指针。

这完全就不受spring管理,所以spring管理的任何其他的东西你就拿不到,也就会报NullPointerException错误,所以在此时一旦自行new,所有的相应主入即会失效,在使用时就产生了冲突。

注意,这里并不是说使用了注解以后就不能new,测试结果是:能实例化,并且相应的方法也是可以使用的。但是,实例化后相应Class相关的注入也就会集体失效,除非你所有步骤都用new的方式,否则它还是会报错。

至于正确的解决方案,使用了注解,就别使用new,二者不可兼得。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值