@Autowired-Objekte erhalten einen Nullwert

8

Versuchen Sie, ein Projekt einzurichten, scheitern jedoch beim Autowiren von Objekten durch Spring.

%Vor%

Das Ausführen gibt mir eine NullPointerException, wenn cd.addContact aufgerufen wird. Die ContactDaoImpl:

%Vor%

Meine Servlet-Datei:

%Vor%

Meine Datei hibernate.cfg.xml:

%Vor%

Meine web.xml-Datei:

%Vor%

Ich nehme an, der Fehler ist, dass die SessionFactory nicht korrekt über @Autowired initialisiert wird, aber warum ist das so? Könnte es sich um ein einfaches Verzeichnisstruktur- / Dateipfadproblem handeln oder ist es etwas komplizierter?

Vielen Dank im Voraus.

UPDATE: KontaktDAOImpl Klasse:

%Vor%     
Soroush Hakami 27.01.2011, 12:28
quelle

6 Antworten

14

Um Spring-Features zu verwenden (Autowiring, Call-to-Construct-Methoden oder -Aspekte) müssen Sie Spring die Instances anstelle von new instanziieren lassen.

Zum Beispiel:

%Vor%

AnnotationConfigApplicationContext durchsucht die Klassen in den Klassen im Paket se.hsr.web nach Klassen mit Spring-Anmerkungen. Es erfordert Frühling 3.0 zu arbeiten. Zuvor sollten Sie die folgende Zeile in Ihrer applicationContext.xml -Datei hinzufügen:

%Vor%     
gabuzo 27.01.2011, 12:37
quelle
2
___ qstnhdr ___ @Autowired-Objekte erhalten einen Nullwert ___ antwort4816368 ___

Sie benötigen dies ganz oben in Ihrer Testklasse:

%Vor%

Ich habe JUnit4 angenommen; meine Aufsicht.

Sie benötigen das Context-Konfigurations-Tag irgendwo in einem Anwendungskontext, aber ich sehe nirgendwo in Ihrem Code, wo Sie tatsächlich eine Anwendungskontextdatei öffnen und einen ApplicationContext erstellen. Normalerweise wird dies in einer Einrichtungsmethode für Ihren Test durchgeführt. Sie werden mehr Glück haben, wenn Sie irgendwo einen ApplicationContext erstellen. Versuchen Sie, das XML von Ihrem CLASSPATH in einer Setup-Methode zu lesen, und sehen Sie, ob das hilft.

    
___ answer8039323 ___

Fügen Sie %code% dem DAO / DAOImpl hinzu.

    
___ answer10895464 ___

Sie erstellen das POJO außerhalb des Frühlingskontexts.

Wenn Sie wirklich "manuell" instanziieren möchten, können Sie dies beheben, indem Sie %code% zu Ihrer Konfiguration hinzufügen und dann %code% mit %code%

annotieren     
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123spring ___ Das Spring Framework ist ein Open-Source-Framework für die Anwendungsentwicklung auf der Java-Plattform. Im Mittelpunkt steht die umfassende Unterstützung von komponentenbasierten Architekturen, und es verfügt derzeit über ein Dutzend hochintegrierter Module. ___ tag123javaee ___ Die Java Enterprise Edition (Java EE) ist eine Spezifikation, die eine Sammlung von Java-basierten Server- und Clienttechnologien und deren Interoperabilität definiert. Das [java-ee] -Tag ist rudimentär zu fokussierten Fragen über die spezifischeren APIs wie [jsf], [servlets], [jpa], [cdi], [ejb] usw. Verwenden Sie es nur bei Problemen mit allgemeinen Kombinationen (zB Interaktion zwischen einzelnen APIs und / oder Anwendungsservern). ___ tag123autowired ___ Autowinding ist ein DI-Container-Feature, bei dem die Abhängigkeiten nach bestimmten Kriterien automatisch gesucht werden. ___ qstntxt ___

Versuchen Sie, ein Projekt einzurichten, scheitern jedoch beim Autowiren von Objekten durch Spring.

%Vor%

Das Ausführen gibt mir eine NullPointerException, wenn cd.addContact aufgerufen wird. Die ContactDaoImpl:

%Vor%

Meine Servlet-Datei:

%Vor%

Meine Datei hibernate.cfg.xml:

%Vor%

Meine web.xml-Datei:

%Vor%

Ich nehme an, der Fehler ist, dass die SessionFactory nicht korrekt über @Autowired initialisiert wird, aber warum ist das so? Könnte es sich um ein einfaches Verzeichnisstruktur- / Dateipfadproblem handeln oder ist es etwas komplizierter?

Vielen Dank im Voraus.

UPDATE: KontaktDAOImpl Klasse:

%Vor%     
___ answer4816434 ___

Sie benötigen dies in Ihrer Spring-Konfiguration, damit AutoWire funktionieren kann

%Vor%     
___ answer4816373 ___

Um Spring-Features zu verwenden (Autowiring, Call-to-Construct-Methoden oder -Aspekte) müssen Sie Spring die Instances anstelle von %code% instanziieren lassen.

Zum Beispiel:

%Vor%

%code% durchsucht die Klassen in den Klassen im Paket %code% nach Klassen mit Spring-Anmerkungen. Es erfordert Frühling 3.0 zu arbeiten. Zuvor sollten Sie die folgende Zeile in Ihrer %code% -Datei hinzufügen:

%Vor%     
___ answer4816315 ___

Sie müssen die ContactDAO-Instanz aus dem Spring-Kontext abrufen. Sie greifen sich mit %code% keyword an.

Siehe den folgenden Link;

@Autowired Annotation kann keine Bean injizieren JUnit-Klasse

oder wenn nicht Unit Test

%Vor%

Ссылка

    
___
duffymo 27.01.2011 12:36
quelle
1

Sie benötigen dies in Ihrer Spring-Konfiguration, damit AutoWire funktionieren kann

%Vor%     
Michael Borgwardt 27.01.2011 12:42
quelle
1

Fügen Sie @Component/@Repository dem DAO / DAOImpl hinzu.

    
thil 07.11.2011 16:21
quelle
1

Sie erstellen das POJO außerhalb des Frühlingskontexts.

Wenn Sie wirklich "manuell" instanziieren möchten, können Sie dies beheben, indem Sie <context:spring-configured /> zu Ihrer Konfiguration hinzufügen und dann ContactDAOImpl mit @Configurable

annotieren     
kabal 05.06.2012 10:15
quelle
0

Sie müssen die ContactDAO-Instanz aus dem Spring-Kontext abrufen. Sie greifen sich mit new keyword an.

Siehe den folgenden Link;

@Autowired Annotation kann keine Bean injizieren JUnit-Klasse

oder wenn nicht Unit Test

%Vor%

Ссылка

    
fmucar 27.01.2011 12:32
quelle

Tags und Links