Ich mache meine Spring-Konfiguration programmatisch. Ich bekomme nicht die Injektionsergebnisse, die ich erwarte, also habe ich mir die Protokolle angesehen und aus irgendeinem Grund erzeugt Spring meine Singleton-Bohnen zweimal.
Ich bekomme das in Tomcat Start-up Logs
%Vor%Ist das normales Verhalten?
Dies ist mein Anwendungskontext
%Vor%Dies ist mein Servlet-Kontext
%Vor%Und meine Servlet-Initialisierungsklasse namens BidAppInitializer
%Vor%Dies ist mein vollständiges Tomcat-Startprotokoll:
%Vor% Singleton garantiert eine einzelne Instanz im Spring-Container. Das bedeutet, dass Sie so viele singleton
-Instanzen haben können, wie Container vorhanden sind (selbst wenn sie den gleichen JVM-Klassenlader verwenden). Siehe Der Singleton-Bereich und diese Antwort für Singleton Design Pattern vs. Singleton Bean
In Ihrem Fall instanziieren Sie zwei Kontexte - rootContext und servletContext und von denen Log-Statements stammen.
Wenn Sie eine einzelne Instanz jedes Singletons haben möchten, könnten Sie diese beiden Kontexte zusammenführen.
Kleine Java-Klasse, die ein solches Verhalten veranschaulicht (Entschuldigung für die seltsame Code-Formatierung - wollte es prägnanter machen):
%Vor%Es gibt zwei Arten von Kontexten, von denen einer der Wurzelkontext und der andere der Kontext der Webanwendung ist.
Wenn in WebAppInitalizer, wo Sie erweitern, erweitert AbstractAnnotationConfigDispatcherServletInitializer-Klasse Stellen Sie sicher, dass
Sie überschreiben die folgenden Methoden und stellen sicher, dass die Klassendefinition in den beiden Methoden nicht wiederholt wird.
@Override Geschützte Klasse [] getServletConfigClasses () { gebe neue Klasse zurück [] {MvcConfig.class}; }
%Vor%Tags und Links java spring spring-mvc servlets