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中