2010-07-20 12 views
117

documentado here afirmaprimavera diferencia ruta de clase prefijo

Este prefijo especial especifica que todos los recursos ruta de clases que coinciden con el nombre dado debe obtenerse (internamente, esto ocurre esencialmente a través de un ClassLoader.getResources (. ..) llamada), y luego se fusionó para formar la definición del contexto de la aplicación final .

¿Alguien puede explicar esto?

Cuál es la diferencia entre usar classpath*:conf/appContext.xml en comparación con classpath:conf/appContext.xml sin el asterisco.

Respuesta

168

definición simple

El classpath*:conf/appContext.xml simplemente significa que todos los archivos de appContext.xml bajo conf carpetas en todos los frascos en la ruta de clases será recogido y se unió en un contexto de aplicación grande.

Por el contrario, classpath:conf/appContext.xml cargará solo uno de esos archivos ... el primero encontrado en su classpath.

+6

hay una diferencia más interesante entre ellos. Ver mi pregunta también: http: // stackoverflow.com/questions/16985770/runwith-and-contextconfiguration-weird-behavior – Eugene

+17

Una cosa muy importante: si usa * y Spring no encuentra coincidencias, no se quejará. Si no usa * y no hay coincidencias, el contexto no se iniciará (!) –

37

La sintaxis classpath*:... es útil principalmente cuando se desea crear un contexto de aplicación a partir de varios archivos de definición de bean, usando la sintaxis comodín.

Por ejemplo, si construye su contexto usando classpath*:appContext.xml, classpath se escaneará para cada recurso llamado appContext.xml en el classpath, y las definiciones de bean de todos ellos se fusionaron en un solo contexto.

En contraste, classpath:conf/appContext.xml obtendrá un solo archivo llamado appContext.xml del classpath. Si hay más de uno, los demás serán ignorados.

+1

Will classpath * buscar en subdirectorios también? En otras palabras, si tengo appContext.xml en la raíz de la ruta de clase y otra en /dir/appContext.xml, ¿se cargarán ambos cuando use classpath *: appContext.xml? – AHungerArtist

17

ruta de clases *: Se refiere a una lista de recursos y cargas todos dichos archivos presentes en la ruta de clase y lista puede estar vacía y si hay tal archivo está presente en la ruta de clase entonces la aplicación no arroja ninguna excepción (simplemente ignora el error).

ruta de clases: Se refiere a un determinado recurso y cargas sólo el primer archivo se encuentra en la ruta de clase y si no existe el fichero está presente en la ruta de clase se producirá una excepción

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