2012-08-17 13 views
9

He visto algunos códigos Spring que leen los archivos de configuración y otros recursos directamente desde el classpath en tiempo de ejecución usando el protocolo classpath:/some/path/to/resource URL.Java URL Protocols: classpath: /?

¿Es esto una construcción de primavera o una construcción de Java?

No puedo encontrar ninguna documentación además de esta pregunta - URL to load resources from the classpath in Java, que no indica de ninguna manera.

Si se trata de una construcción de Java, ¿alguien puede indicarme su documentación oficial?

+0

Sugiero leer sobre la abstracción 'ResourceLoader': http://static.springsource.org/spring/docs/3.0.x/reference/resources.html#resources-resourceloader –

Respuesta

11

Bueno, siempre puede registrar controladores de URL. Java también tiene un archivo: /// y jar: handler. También class.getResource leerá de forma predeterminada desde classpath.

http://code.google.com/p/madura-classpath-protocol-handler/

Parece ser que es una característica de la primavera.

"Puede ver estos controladores estándar y las clases de implementación asociadas en el archivo RT.JAR del JDK. Busque las clases cuyo nombre completo comienza con sun.net.www.protocol.Por ejemplo, el sol de clase. net.www.protocol.http.Handler define el controlador de protocolo HTTP. La clase sun.net.www.protocol.ftp.Handler define la clase de controlador de protocolo FTP. "

http://java.sun.com/developer/onlineTraining/protocolhandlers/

"Excepción en hilo "principal" java.net.MalformedURLException: protocolo desconocido: ruta de clases" (dice java 1.6)

+0

¡Consejos interesantes! ¡No sabía que podrías registrar tus propios manejadores (+1)! ¿Pero sabes si 'classpath' es un manejador de URL definido/registrado por Spring, o si se envía con Java? ¡Gracias de nuevo! – IAmYourFaja

+0

Creo que es una función de resorte incorporada (mirando ese enlace allí) –

4

ruta de clase: es específico de la primavera. El mecanismo de resolución de recursos de Spring (es decir, PathMatchingResourcePatternResolver u otras imlementaciones) conoce los prefijos "classpath:" y "classpath *:".

Toma eso y se resuelve en ClassPathResource objeto (s), que pasan a implementar resortes Resource interfaz.

La interfaz Resource, entre otras cosas, tiene un método getInputStream() que se puede utilizar para obtener los contenidos, sin tener que saber qué tipo de recurso es.

Esto es completamente independiente de cualquier tratamiento de protocolo URL, por lo que no necesariamente será necesario agregarlo directamente como controlador de protocolo.

Sin embargo, es posible que pueda utilizar la clase ClassPathResource como parte de su manejador de protocolo.