2017-02-23 1 views
0

Ich bin relativ neu in Java und komme aus dem Internet, als ich im Frühjahr versuchte, eine Web-Anwendung zu implementieren.Injektion von Federkontext in Nicht-Feder-Klasse

Das Hauptproblem ist, ich die folgende Ordnerstruktur habe: enter image description here

Und ich versuche Frühling Kontext in jede Klasse in dem Controller-Ordner, der im Grunde genommen, so weit gefunden zu injizieren, wie ich Mittel verstanden, dass meine Klassen sind nicht vom Frühling abhängig.

Die Anwendung verwendet MongoDB als Backend, und ich versuche, den Kontext so instantinate:

WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext(); 

IODataInterface mongo = context.getBean(BookModel.class); 

Ich bekomme diese Ausnahme auf dem context.getBean (...) Leitung: com. web.spring.Controllers.DemoController.DemoController (DemoController.java:19)

Jede Hilfe ist willkommen, und ich wäre wirklich froh, wenn jemand mir die tatsächliche Terminologie richtig erklären könnte, wie Sie vielleicht bereits erraten haben, habe ich in etwas ziemlich fortgeschrittenes Zeug für jemanden mit 0 Java Arbeitserfahrung gesprungen.

Voll Ausnahme-Stack:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Und soweit ich sehe, scheint der Kontext geschaffen, aber die getBean() funktioniert nicht. Ich bin jetzt wirklich verwirrt.

+1

Post vollständige Ausnahme, und Ihre Controller sollten bereits Bohnen sein, so sollte nur normale Autowirkung funktionieren. – Strelok

+0

Ich habe die Ausnahme hinzugefügt, nicht sicher über die Autowiring, wie bisher scheint ich tatsächlich den Kontext zu haben, aber die getBean funktioniert immer noch nicht. BookModel ist auch im applicationContext als Bean definiert. Das ist wirklich verwirrend. –

Antwort

1

Sie scheinen zu versuchen, eine Instanz einer Modellklasse (kommentiert von @Document Ich stelle mir vor, da Sie MongoDb verwenden). @Document und JPA @Entity annotierte Klassen sind eigentlich keine Frühlingsbohnen.

Um einen neuen zu instanziieren, können Sie einfach new BookModel() verwenden.

PS. Als Nebenbemerkung nehmen Sie bitte eine Low-Case-Paket/Ordner-Namenskonvention an. Nur Klassennamen sollten mit einem Großbuchstaben beginnen.

+0

Meine Modellklasse verwendet auch eine MongoTemplate, von der ich nicht mehr weiß, wie ich ohne Bean initialisieren soll. Was wäre der richtige Ansatz dafür? –

+0

Dies ist kein gutes Design, da Sie Ihre Modelle mit der Implementierung der Datenschicht koppeln (stellen Sie sich vor, wenn Sie die Objekte jetzt in etwas anderem und nicht MongoDb speichern müssten). Wenn Sie MongoTemplate verwenden, führen Sie eine "Service" -Schicht ein, auf der Sie die MongoTemplate injizieren und verwenden. Behalten Sie Ihre Geschäftslogik in den Services und injizieren Sie die Services in Ihre Controller. Außerdem können Sie keine Abhängigkeiten in Modellklassen einfügen. – Strelok