2012-04-11 4 views
1

Ich habe an meinem ersten Spring-Projekt gearbeitet und bin auf ein lästiges Problem gestoßen.Einige von @Autowired gesetzte Objekte sind immer Null, andere sind OK

Ich habe eine Klasse namens 'UsernameService', das wie eine Bohne in der Dispatcher-servlet.xml konfiguriert ist:

<bean id="usernameService" class="service.UsernameService" scope="session" > 
    <aop:scoped-proxy /> 
</bean> 

und wenn diese Bohne in einer meiner Klassen erstellt (Bean Definition :)

<bean id="testController" class="controller.TestController" /> 

als solche:

@Autowired 
UsernameService uns; 

funktioniert es absolut in Ordnung. Allerdings, wenn ich versuchen und tun das gleiche in einer anderen Klasse, LogController:

<bean id="logController" class="controller.LogController" /> 

dann funktioniert es nicht, und ich erhalte den folgenden Fehler:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/flexitime] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException

Ich habe es geschafft, (ich glaube,) schreibe diesen Fehler der Tatsache zu, dass uns nie wirklich gesetzt/erstellt wird und in LogController als null bleibt.

Ich habe das ausgiebig gegoogelt und viele "Lösungen" gefunden, jedoch hat noch keiner von ihnen funktioniert.

Danke! James

+0

Wie die LogController zugegriffen wird. Haben Sie eine Methode mit @RequestMapping, die als Antwort auf eine Webanfrage aufgerufen wird oder machen Sie einen neuen LogController irgendwo in Ihrem Code? – gkamal

+0

Das Objekt darf nicht mit "neu" erstellt werden, damit die Injektion funktioniert. –

+0

@gkamal LogController wird von einem anderen Controller aus aufgerufen, und es ist selbst eine autowired Bean: '@Autowired (new line) LogController ls'. @thorb Ich verwende das neue Schlüsselwort nicht, um die Klasse zu initialisieren. – ymhr

Antwort

0

Fügen Sie die auto-wire Attribut Bean:

<bean id="usernameService" class="service.UsernameService" scope="session" autowire="byName"> 
    <aop:scoped-proxy /> 
</bean> 
+0

Das gibt mir den Fehler: 'Attribut 'default-autowire' darf nicht im Element 'bean'' erscheinen – ymhr

+0

den Code aktualisiert, einmal überprüft –

+0

Aktualisiert, sorry ich hätte gemerkt, dass mein Selbst :(Leider das immer noch nicht arbeite nicht. – ymhr

Verwandte Themen