版权声明:转发请标明出处,谢谢! https://blog.csdn.net/Myuhua/article/details/84317582
报错信息,这个我是截了上一部分,为了省空间下部分我就用...代替了。
java.lang.NullPointerException
at com.jd.impl.UploadServiceImpl.uploadBlock(UploadServiceImpl.java:39)
at com.jd.test.TestController.testFileUploadMethod(TestController.java:71)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at ...
小编第一次使用springboot搭建项目就报了这么个错误着实在让人有点小无奈,在搭建过程中我总结了我目前遇到得两种情况:
第一种,启动类未对包配置注解扫描,原因可能是因为搭建springboot单项目模块的时候不需要单独配置包注解扫描而忽略了这个问题。(括弧,敲黑板,你要注意你注入的组件比如Service 及 ServiceImpl均需在com(com.example)包下!我这儿把启动类又往外移了一层所以我用的com,建议大家采用com.example的建包形式,将启动类放入com.example.a下面的a包下,组件扫描的时候扫com.example(如:com.jd)包)。
//第一种问题解决方法:配置扫描注解
@SpringBootApplication(scanBasePackages = "com")
//@SpringBootApplication
//@ComponentScan(basePackages = "com")
public class SpringBootStart {
public static void main(String[] args) {
SpringApplication.run(SpringBootStart.class,args);
}
}
注意:下面第一句与下面得两句相等,你想怎么用看你自己的爱好。
@SpringBootApplication(scanBasePackages = "com")
//@SpringBootApplication
//@ComponentScan(basePackages = "com")
第二种:这一种就有点kd了,不仔细看还真看不出来,我在起初代码测试的时候用的new实例的方法去做的,而在后来用springboot去管理的时候我忘记了注释掉,总结一句就是,第二种错误的原因是因为出现了new实例与框架自动注入管理同时出现的情况,new出来后的实例与springboot管理后注入进来的实例不是同一个(一个被初始化了,一个未被初始化),导致,报了空指针的错误。以后记得只要是用自动注入就别再自己new同样的实例了。
@Test
public void testFileUploadMethod() throws IOException {
String fileSrc = "D:\\tempfile\\elasticsearch-6.4.2.zip";
byte[] bytes1 = fileToByteArrayService.fileToBytes(fileSrc);
int subSize = 1000000 * 25;
Object[] objects = splitFlieService.splitAry(bytes1, subSize);
byte[] bytes = null;
//分片文件开始上传
long start = System.currentTimeMillis();
// UploadServiceImpl uploadService = new UploadServiceImpl();
for (int i = 0; i < objects.length; i++) {
bytes = (byte[]) objects[i];
UploadBlockInputVo param = new UploadBlockInputVo();
param.setFileName("elasticsearch-6.4.2");
param.setOffset(0);
try {
uploadService.uploadBlock(param);
} catch (Exception e) {
e.printStackTrace();
}
}
}
代码种注释掉的那句就是出错的部分,这个service我已经在上方注入了,同时这块new的代码没注释掉,
两个实例不一样,springboot找不到注入的实例导致报了空指针的错误。
近期我会找个时间写篇文章把为什么new对象跟自动注入对象同时使用会空指针,还有就算new对象怎么处理才不会出现空指针的问题。
若有问题欢迎大家与我互动交流,如果文章帮到了你,请动动你的小手指给点个小心。另外,每周我会尽量至少更新一篇博客文章,喜欢的朋友可以加一下关注。