Documenté ici il est indiqué
Ce préfixe spécial spécifie que toutes les ressources de chemin d'accès aux classes qui correspondent au nom donné doivent être obtenues (en interne, cela se produit essentiellement via un appel ClassLoader.getResources (...)), puis fusionnées pour former la définition de contexte d'application finale.
Quelqu'un peut-il expliquer cela?
Quelle est la différence entre utiliser classpath*:conf/appContext.xml
Par opposition à classpath:conf/appContext.xml
Sans l'astérisque.
DÉFINITION SIMPLE
Le classpath*:conf/appContext.xml
signifie simplement que tous les fichiers appContext.xml sous conf
les dossiers de tous vos fichiers JAR du chemin de classe seront pris en compte et réunis dans un seul et même contexte d’application.
En revanche, classpath:conf/appContext.xml
chargera n seul fichier de ce type ... le premier trouvé sur votre chemin de classe.
Le classpath*:...
La syntaxe est utile principalement lorsque vous souhaitez créer un contexte d'application à partir de plusieurs fichiers de définition de bean, à l'aide de la syntaxe générique.
Par exemple, si vous construisez votre contexte en utilisant classpath*:appContext.xml
, le chemin de classe sera analysé pour chaque ressource appelée appContext.xml
dans le chemin de classe et les définitions de beans de toutes fusionnées dans un seul contexte.
En revanche, classpath:conf/appContext.xml
obtiendra un et un seul fichier nommé appContext.xml
du classpath. S'il y en a plus d'un, les autres seront ignorés.
classpath *: Il fait référence à un liste de ressources et charge tout ces fichiers présents dans le classpath et la liste peut être vide et si aucun fichier de ce type n'est présent dans le chemin d'accès aux classes, puis application ne lève aucune exception (ignore simplement l'erreur).
classpath: Il fait référence à un fichier certaines ressources et ne charge que le premier fichier trouvé sur le chemin d'accès aux classes et si aucun fichier de ce type n'est présent dans le classpath, une exception sera lancée
Java.io.FileNotFoundException: class path resource [conf/appContext.xml] cannot be opened because it does not exist
Le code source de 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)};
}
}
}