java – SprintBoot应用程序抛出NullPointer异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – SprintBoot应用程序抛出NullPointer异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3905字,纯文字阅读大概需要6分钟。
内容图文
![java – SprintBoot应用程序抛出NullPointer异常](/upload/InfoBanner/zyjiaocheng/754/16bb3ea3e90843aca535cfa73f7bf598.jpg)
我遇到了SpringBoot可能存在的基本问题,但我不知道如何管理它:每次我想访问一个注入的服务时,这个都是Null.
2019-03-03 18:01:34.766 INFO 6428 --- [ restartedMain] c.c.s.SpringAbstractApplication : Starting SpringAbstractApplication on BORN2CODE with PID 6428 (D:\Datas\Workspaces\Tests\SpringAbstract\target\classes started by Loveg in D:\Datas\Workspaces\Tests\SpringAbstract)
2019-03-03 18:01:34.769 INFO 6428 --- [ restartedMain] c.c.s.SpringAbstractApplication : No active profile set, falling back to default profiles: default
2019-03-03 18:01:34.839 INFO 6428 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2019-03-03 18:01:35.742 INFO 6428 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2019-03-03 18:01:35.782 INFO 6428 --- [ restartedMain] c.c.s.SpringAbstractApplication : Started SpringAbstractApplication in 1.547 seconds (JVM running for 2.233)
In the Launcher Go
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.NullPointerException
at com.citizenweb.springabstract.classes.Launcher.go(Launcher.java:23)
at com.citizenweb.springabstract.SpringAbstractApplication.main(SpringAbstractApplication.java:15)
... 5 more
这是一个有问题的基本应用程序:
由SpringBoot构建的主应用程序,我在其中添加了一个Launcher对象:
package com.citizenweb.springabstract;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.citizenweb.springabstract.classes.Launcher;
@SpringBootApplication
public class SpringAbstractApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAbstractApplication.class, args);
Launcher app = new Launcher();
app.go();
}
}
我建造的启动器(由Spring主编):
package com.citizenweb.springabstract.classes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.citizenweb.springabstract.interfaces.IFactoryService;
@Component
public class Launcher {
@Autowired
IFactoryService factory;
public void go() {
System.out.println("In the Launcher Go");
factory.testFactory();
}
}
我想要使??用的服务(界面):
package com.citizenweb.springabstract.interfaces;
public interface IFactoryService {
void testFactory();
}
服务类:
package com.citizenweb.springabstract.classes;
import org.springframework.stereotype.Service;
import com.citizenweb.springabstract.interfaces.IFactoryService;
@Service
public class FactoryService implements IFactoryService {
@Override
public void testFactory() {
System.out.println("In the Factory service");
}
}
每次我启动应用程序时,我都有一个空指针异常,因为@Autowired IFactoryService工厂变量(在Launc类中)为null.
就像Spring无法扫描接口和类所在的包那样.正如您所看到的,我尊重Spring关于包结构的规则.
有什么办法让Spring扫描我的包裹吗?通常,@ SpringBootApplication注释本身应该这样做吗?
解决方法:
这里的问题是你手动实例化Launcher类.
Launcher app = new Launcher();
app.go();
这样做意味着在Spring控制之外,在其操作环境之外.
Spring能够自动连接您的依赖项,因为它实例化了您的Bean类.上下文中的每个Bean都有一个BeanDefinition关联,它描述了它.但是,如果您手动创建一个类,则不会发生这种情况.
无法以这种方式注入IFactoryService.
你可以做的是通过#run静态方法调用获取BeanFactory
final BeanFactory factory = SpringApplication.run(SpringAbstractApplication.class, args);
final Launcher launcher = factory.getBean(Launcher.class);
launcher.go();
内容总结
以上是互联网集市为您收集整理的java – SprintBoot应用程序抛出NullPointer异常全部内容,希望文章能够帮你解决java – SprintBoot应用程序抛出NullPointer异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。