2012-08-17 8 views
9

Widziałem pewien kod źródłowy, który odczytuje pliki konfiguracyjne i inne zasoby bezpośrednio poza ścieżką klasy środowiska wykonawczego przy użyciu protokołu URL classpath:/some/path/to/resource.Java URL Protocols: classpath: /?

Czy jest to konstrukcja wiosenna, czy konstrukcja Java? Nie można znaleźć żadnej dokumentacji poza tym pytaniem - URL to load resources from the classpath in Java, co nie oznacza żadnej z tych możliwości

Jeśli jest to konstrukcja Java, czy ktoś może wskazać mi oficjalną dokumentację?

+0

Proponuję przeczytać o abstrakcji 'ResourceLoader': http://static.springsource.org/spring/docs/3.0.x/reference/resources.html#resources-resourceloader –

Odpowiedz

11

Zawsze można zarejestrować narzędzia do obsługi adresów URL. Java ma również plik: /// i jar: handler. Również klasa.getResource będzie domyślnie czytana ze ścieżki klasy.

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

widocznie jest to cecha wiosna.

"Te standardowe procedury obsługi i powiązane klasy implementacji można znaleźć w pliku RT.JAR pliku JDK. Poszukaj klas, których pełna nazwa zaczyna się od sun.net.www.protocol. Na przykład klasy słońce. net.www.protocol.http.Handler definiuje procedurę obsługi protokołu HTTP Klasa sun.net.www.protocol.ftp.Handler definiuje klasę obsługi protokołu FTP. "

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

"wyjątek w wątku "głównym" java.net.MalformedURLException: nieznana Protokół: ścieżka klasy" (mówi Java 1,6)

+0

Fajne wskazówki! Nie wiedziałem, że możesz zarejestrować własne programy obsługi (+1)! Ale czy wiesz, czy 'classpath' to program obsługi URL zdefiniowany/zarejestrowany przez Spring, czy też dostarczany z Java? Dzięki jeszcze raz! – IAmYourFaja

+0

Myślę, że jest to funkcja wbudowana wiosna (patrząc na ten link tam) –

4

ścieżka klasy: jest specyficzne dla sprężyny. Mechanizm rozwiązania zasobu Spring (tj. PathMatchingResourcePatternResolver lub inne implikacje) zna przedrostki "classpath:" i "classpath *:".

Potrwa to i przekształca się w obiekt (y) ClassPathResource, które zaimplementowały interfejs sprężynowy Resource.

Interfejs Resource ma między innymi metodę getInputStream(), którą można wykorzystać do pobrania zawartości, bez konieczności orientowania się, jaki to rodzaj zasobu.

Jest to całkowicie oddzielne od obsługi dowolnego protokołu URL, więc niekoniecznie będzie można bezpośrednio dodać to jako procedurę obsługi protokołu.

Możliwe jest jednak korzystanie z klasy ClassPathResource jako części programu obsługi protokołu.