wake-up-neo.com

Spring classpath prefix difference

Dokumentiert hier heißt es

Dieses spezielle Präfix gibt an, dass alle Klassenpfadressourcen, die mit dem angegebenen Namen übereinstimmen, abgerufen werden müssen (intern geschieht dies im Wesentlichen über einen Aufruf von ClassLoader.getResources (...)) und dann zur endgültigen Anwendungskontextdefinition zusammengeführt werden müssen.

Kann das jemand erklären?

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

135
JavaRocky

EINFACHE DEFINITION

Das classpath*:conf/appContext.xml bedeutet einfach, dass alle appContext.xml-Dateien unter conf in all Ihren Gläsern im Klassenpfad aufgenommen und zu einem großen Anwendungskontext zusammengefügt wird.

Im Gegensatz, classpath:conf/appContext.xml wird geladen nur eine solche Datei ... die erste, die in Ihrem Klassenpfad gefunden wurde.

198
Eugene Ryzhikov

Die Syntax classpath*:... Ist vor allem dann nützlich, wenn Sie einen Anwendungskontext aus mehreren Bean-Definitionsdateien mit Platzhaltersyntax erstellen möchten.

Wenn Sie beispielsweise Ihren Kontext mit classpath*:appContext.xml Erstellen, wird der Klassenpfad nach jeder Ressource mit dem Namen appContext.xml Im Klassenpfad durchsucht und die Bean-Definitionen von allen in einem einzigen Kontext zusammengeführt.

Im Gegensatz dazu erhält classpath:conf/appContext.xml Eine einzige Datei mit dem Namen appContext.xml Aus dem Klassenpfad. Wenn es mehr als einen gibt, werden die anderen ignoriert.

38
skaffman

classpath *: Es bezieht sich auf Liste der Ressourcen und lädt alle solche Dateien im classpath und Liste kann leer sein und wenn keine solche Datei vorhanden ist im Klassenpfad dann application wirft keine Ausnahme (ignoriert nur den Fehler).

classpath: Es bezieht sich auf eine bestimmte Ressource und lädt nur die erste Datei, die im classpath gefunden wurde, und falls keine solche Datei vorhanden ist) im Klassenpfad wird eine Ausnahme ausgelöst

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

Der Quellcode von Spring:

public Resource[] getResources(String locationPattern) throws IOException {
   Assert.notNull(locationPattern, "Location pattern must not be null");
   //CLASSPATH_ALL_URL_PREFIX="classpath*:"
   if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX)) {
      // a class path resource (multiple resources for same name possible)
      if (getPathMatcher().isPattern(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()))) {
         // a class path resource pattern
         return findPathMatchingResources(locationPattern);
      }
      else {
         // all class path resources with the given name
         return findAllClassPathResources(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()));
      }
   }
   else {
      // Only look for a pattern after a prefix here
      // (to not get fooled by a pattern symbol in a strange prefix).
      int prefixEnd = locationPattern.indexOf(":") + 1;
      if (getPathMatcher().isPattern(locationPattern.substring(prefixEnd))) {
         // a file pattern
         return findPathMatchingResources(locationPattern);
      }
      else {
         // a single resource with the given name
         return new Resource[] {getResourceLoader().getResource(locationPattern)};
      }
   }
}  
0
zzz