2016-07-17 40 views
2

Ich habe ein Problem mit meinem Konstruktor in einem meiner Controller. Ich versuche, einen Dienst in einem Konstruktor aufzurufen. Der Dienst wird in einem AbstractController autowired, aber ich habe eine Nullpointer-Ausnahme.Instanziierung von Bean fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.beans.BeanInstantiationException:

A-Komponente:

@Component 
@RestController 
@RequestMapping(value = "/test", ...) 
public class AController extends AbstractController { 

    @Autowired 
    SomeService someService; 

    public AController(){ 
     globalService.setClazz(Test.class); 
    } 
.... 

hier die AbstractController:

public abstract class AbstractController<T> { 

    @Autowired 
    GlobalService globalService; 

    ... 

hier die Ausnahme. Es wird throwed in von globalService.setClazz(Test.class);

Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.x.server.controller.AController]: Constructor threw exception; nested exception is java.lang.NullPointerException -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.1.RELEASE:run (default-cli) on project eza: An exception occurred while running. null 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 
     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:497) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.apache.maven.plugin.MojoExecutionException: An exception occurred while running. null 
     at org.springframework.boot.maven.AbstractRunMojo$IsolatedThreadGroup.rethrowUncaughtException(AbstractRunMojo.java:438) 
     at org.springframework.boot.maven.RunMojo.runWithMavenJvm(RunMojo.java:61) 
     at org.springframework.boot.maven.AbstractRunMojo.run(AbstractRunMojo.java:215) 
     at org.springframework.boot.maven.AbstractRunMojo.execute(AbstractRunMojo.java:174) 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
     ... 20 more 
Caused by: 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:497) 
     at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:467) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'movieController' defined in file [...com/x/server/controller/AController.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.x.server.controller.AController]: Constructor threw exception; nested exception is java.lang.NullPointerException 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764) 
     at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) 
     at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134) 
     at com.x.server.Application.main(Application.java:36) 
     ... 6 more 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.x.server.controller.AController]: Constructor threw exception; nested exception is java.lang.NullPointerException 
     at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 
     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098) 
     ... 22 more 
Caused by: java.lang.NullPointerException 
     at com.x.server.controller.AController.<init>(AController.java:40) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
     at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 
     ... 24 more 

Danke für die Hilfe

Antwort

2

Sie verwenden globalService Feld innerhalb des Konstruktor, aber der Konstruktor aufgerufen wird, bevor @Autowired Felder gesetzt sind, so globalService ist null an diesem Punkt.

Sie sollten wahrscheinlich

@PostConstruct 
public void init() { 
    globalService.setClazz(Test.class); 
} 

anstelle des Konstruktor verwenden. Oder besser, machen Sie diese Einstellung an der gleichen Stelle, wo GlobalService erstellt wird.

+0

es funktioniert. Nett!!! – emoleumassi

0

Legen Sie die @Component Anmerkung in Ihrer Super-Klasse als auch. Diese Annotationen befassen sich mit der Klasse, auf die sie angewendet werden, und haben keinen Einfluss auf ihre Elternklasse. So hat die @Autowired keine Wirkung in der übergeordneten Klasse

+0

nein, gleiche Ausnahme – emoleumassi

+0

Dann könnte das einzige Ding sein, dass das Java-Paket Ihrer Superklasse nicht das @ComponentScan in Ihrer Konfigurationsklasse ist. Schau dir das an. Abgesehen davon sehe ich keine Probleme mit Ihrem Code. – user1610338

+0

der AbstractController und der AController sind im selben Paket. Mein ComponentScan sieht @ComponentScan ("com.x.server") – emoleumassi