Spring中@Autowired注入static静态变量空指针异常

public class Test {
    @Autowired
    private static XhOBS obs;

    public static void method(){
        // 调用userService
    }
}

在method 方法内调用obs,会报 java.lang.NullPointerException 空指针异常。

因为XhOBS类为spring的实例对象。添加了@Component注解。

对于@component的解释为:

开发最常用的方式, 通过标注声明告诉Spring容器,让其扫描时将其实例化。主要标注为@Component,以及它的别名@Service,@Controller, @Resource, @Repository等。Spring会扫描@ComponentScan(basePackages={…})提供的路径将所有带有@Component或者别名注解的类实例化。

spring的注入方式是在框架内实例化对象,但是static修饰的变量叫静态变量又叫类变量,是从属于类的,并不是属于某一个实例对象。这是空指针异常的原因。

spring 不建议在静态方法中调用Spring的实例对象。但是非要用呢,那我们只能 “打不过就加入”!

@Component
public class ReadExcelHelper{

    private static XhOBS obs;

    @Autowired
    public void setXhOBS(XhOBS obs){
        ReadExcelHelper.XhOBS = obs;
    }

    public static void method(){
        // 调用obs
    }
}

以setter的方法将你的类注入到spring中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值