Diferencia de prefijo classpath de spring

Documentado aquí indica

Este prefijo especial especifica que se deben obtener todos los recursos classpath que coinciden con el nombre dado (internamente, esto ocurre esencialmente a través de una llamada ClassLoader.getResources (…)), y luego se fusiona para formar la definición final del contexto de la aplicación.

¿Alguien puede explicar esto?

¿Cuál es la diferencia entre usar classpath*:conf/appContext.xml en oposición a classpath:conf/appContext.xml sin el asterisco?

DEFINICIÓN SIMPLE

El classpath*:conf/appContext.xml simplemente significa que todos los archivos appContext.xml en las carpetas conf todos los archivos jar del classpath serán recogidos y unidos en un contexto de aplicación grande.

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

La syntax classpath*:... es útil principalmente cuando se quiere construir un contexto de aplicación a partir de múltiples archivos de definición de bean, usando syntax comodín.

Por ejemplo, si construye su contexto usando classpath*:appContext.xml , la classpath se escaneará para cada recurso llamado appContext.xml en la classpath, y las definiciones de bean de todas ellas fusionadas en un solo contexto.

Por el contrario, 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.

classpath *: Hace referencia a una lista de recursos y carga todos esos archivos presentes en la ruta de clase y la lista puede estar vacía y si dicho archivo no está presente en la ruta de clases, entonces la aplicación no lanza ninguna excepción (simplemente ignora el error).

classpath: se refiere a un recurso determinado y carga solo el primer archivo encontrado en classpath y si dicho archivo no está presente en el classpath generará una excepción

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