2010-07-20 7 views
117

here Dokumentierte heißt esFrühling Classpath Präfix Differenz

Diese spezielle Präfix gibt an, dass alle Classpath Ressourcen, die die angegebenen Namen übereinstimmen muss erhalten werden (intern, dies geschieht im Wesentlichen über eine ClassLoader.getResources (. ..) Aufruf), und dann zusammengeführt, um die endgültige Anwendung Kontextdefinition zu bilden.

Kann jemand das erklären?

Was ist der Unterschied zwischen der Verwendung von classpath*:conf/appContext.xml im Gegensatz zu classpath:conf/appContext.xml ohne das Sternchen.

Antwort

168

einfache Definition

Die classpath*:conf/appContext.xml einfach bedeutet, dass alle appContext.xml Dateien unter conf Ordner in allen Gläsern auf der Classpath aufgenommen werden wird und trat in einen großen Anwendungskontext.

Im Gegensatz classpath:conf/appContext.xml lädt nur eine solche Datei ... die erste auf Ihrem Klassenpfad gefunden.

+6

gibt es noch einen interessanten Unterschied zwischen ihnen. Siehe meine Frage auch: http: // stackoverflow.com/questions/16985770/runwith-und contextconfiguration-seltsame Verhalten – Eugene

+17

Eine sehr wichtige Sache - wenn Sie die * und Spring findet keine Übereinstimmungen, wird es nicht beschweren. Wenn Sie das * nicht verwenden und keine Übereinstimmungen vorhanden sind, wird der Kontext nicht gestartet (!) –

37

Die Syntax classpath*:... ist vor allem nützlich, wenn Sie einen Anwendungskontext aus mehreren Beantendefinitionsdateien mithilfe der Platzhaltersyntax erstellen möchten. Wenn Sie zum Beispiel Ihren Kontext mit classpath*:appContext.xml konstruieren, wird der Klassenpfad für jede Ressource namens appContext.xml im Klassenpfad durchsucht, und die Bean-Definitionen von allen werden in einem einzigen Kontext zusammengeführt.

Im Gegensatz dazu erhält classpath:conf/appContext.xml eine einzige Datei namens appContext.xml aus dem Klassenpfad. Wenn es mehrere gibt, werden die anderen ignoriert.

+1

Wird Klassenpfad * auch in Unterverzeichnissen aussehen? Mit anderen Worten, wenn ich appContext.xml im Klassenpfad-Root und einen in /dir/appContext.xml habe, wird es dann geladen, wenn ich classpath *: appContext.xml verwende? – AHungerArtist

17

Classpath *: Es bezieht sich auf eine Liste der Ressourcen und lädt alle solche Dateien in der Classpath und Liste kann und wenn keine solche Datei wird dann in dem Classpath vorhanden leer Anwendung wirft keine Ausnahme (ignoriert nur den Fehler).

Classpath: Es wird zu einer nur bestimmten Ressource und Lasten bezieht sich die erste Datei auf dem Classpath gefunden und , wenn keine solche Datei im Classpath vorhanden ist, wird eine Ausnahme

java.io.FileNotFoundException: class path resource [conf/appContext.xml] cannot be opened because it does not exist 
werfen