NullPointerException In Spring-boot-und wie behebe ich es?
Heute traf ich einen Fehler in meiner spring-boot-Projekt.
In meinem code möchte ich, um die ApplicationContext
, aber es ist null
, so konnte ich nicht verwenden getBean()
.
Dies ist Application.java
für config:
@SpringBootApplication
@EnableAspectJAutoProxy
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder application) {
return application.sources(Application.class);
}
@Bean
public ServletRegistrationBean readHitchEventServletBean() {
ServletRegistrationBean readHitchEventServletBean =
new ServletRegistrationBean();
readHitchEventServletBean.setServlet(new ReadHitchEventServlet());
readHitchEventServletBean.setLoadOnStartup(5);
return readHitchEventServletBean;
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Dann die servlet :
@Component
public class ReadHitchEventServlet extends HttpServlet implements ApplicationContextAware {
private static final long serialVersionUID = 1L;
private static ApplicationContext applicationContext;
@SuppressWarnings("static-access")
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
//TODO Auto-generated method stub
this.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
@Override
public void init() {
getBean("heheda");
}
}
Und ich erhalte die folgende Fehlermeldung:
java.lang.NullPointerException: null
at com.gdut.dongjun.ActiveSwitchThread.getBean(ReadHitchEventServlet.java:126) ~[classes/:na]
at com.gdut.dongjun.ActiveSwitchThread.<init>(ReadHitchEventServlet.java:66) ~[classes/:na]
at com.gdut.dongjun.ReadHitchEventServlet.init(ReadHitchEventServlet.java:56) ~[classes/:na]
at javax.servlet.GenericServlet.init(GenericServlet.java:158) ~[tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231) [tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1034) [tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4914) [tomcat-embed-core-8.0.23.jar:8.0.23]
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedContext.deferredLoadOnStartup(TomcatEmbeddedContext.java:66) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.startConnector(TomcatEmbeddedServletContainer.java:209) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:152) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:288) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.__refresh(AbstractApplicationContext.java:483) [spring-context-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.jrLockAndRefresh(AbstractApplicationContext.java) [spring-context-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java) [spring-context-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at com.gdut.dongjun.Application.main(Application.java:282) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_79]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_79]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_79]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_79]
at org.springframework.boot.maven.RunMojo$LaunchRunner.run(RunMojo.java:418) [spring-boot-maven-plugin-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at java.lang.Thread.run(Thread.java:745) [na:na]
Wie kann ich es beheben?
- Möglich, Duplikat der Was ist eine Null-Zeiger-Ausnahme aus, und wie kann ich es beheben?
- Es sieht aus wie Ihre Datei ApplicationContext wird irgendwie nicht gesetzt, bis zum Frühjahr.
- Sollte ich hinzufügen, konfigurieren zum festlegen der Datei ApplicationContext?
- Init wird aufgerufen, bevor das Kontext festgelegt ist. Das ist nicht zur Arbeit gehen.
- Warum sind Sie nicht einfach, die Injektion der bean mit der id "heheda"?
- Sorry, ich habe gerade einen test machen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es gut, die haben eine separate Klasse implementiert die ApplicationContextAware zu bieten Anwendungskontext zu den erforderlichen Klassen. Das problem hier scheint zu sein, Spean bean life-cycle-und servlet-container life-cycle-durchführen verschiedener Vorgänge.
ich.e init aufgerufen werden kann, bevor Kontext gesetzt werden konnte, bis zum Frühjahr.
On line:
Erstellen Sie eine neue Instanz der servlet-Objekt, das ist nicht eine Spring-Bean und so ist es nicht WLAN-korrekt. Wenn Sie wollen, es zu tun auf diese Weise, erwägen Sie Folgendes:
Application.java:
ReadHitchEventServlet.java:
Oder noch besser wäre, lassen Sie einfach die Datei ApplicationContext ganz und verkabeln Sie einfach die Bohne Sie die ultimate wollen.
Application.java:
ReadHitchEventServlet.java:
Ich bin gettng
null
wie lösen ??