2012-12-21 6 views
14

Pracuję nad plikami konfiguracyjnymi Spring XML i czasami używają one "classpath:/datasource.xml", a czasami "classpath:datasource.xml". Czy istnieje różnica między tymi dwoma elementami lub czy jest to opcja opcjonalna/domniemana/nadmiarowa? /?Jaka jest różnica między "classpath:" a "classpath: /" w Spring XML?

+0

Nie widzę żadnej różnicy między tymi dwoma. Największą różnicą, jaką zobaczysz, jest względna ścieżka i * w miejscu ścieżki klasy. – muruga

+0

@muruga Właściwie to widziałem, co to znaczy? – ArtB

Odpowiedz

18

Nie widzę żadnej różnicy między tymi dwoma. Największą różnicą, że widać jest, że względna ścieżka a * na miejscu ścieżki klasy

Oto fragment z Spring Resources, poszukaj sekcji 4.7.2.2

Classpath *:
W „classpath *: przedrostek można łączyć z wzorcem PathMatcher w pozostałej części ścieżki lokalizacji, na przykład "classpath *: META-INF/* - beans.xml". W takim przypadku strategia rozwiązywania problemów jest dość prosta: wywołanie ClassLoader.getResources() jest używane na ostatnim segmencie ścieżki bez symboli wieloznacznych, aby uzyskać wszystkie pasujące zasoby w hierarchii programu ładującego klasy, a następnie wyłączyć każdy zasób w tej samej strategii rozstrzygania PathMatchera opisany powyżej jest używany dla podtrybu wieloznacznego.

Oznacza to, że wzorzec taki jak "classpath *: *. Xml" nie będzie pobierał plików z katalogu głównego plików jar, a raczej tylko z katalogu głównego rozszerzonych katalogów. Wynika to z ograniczenia w metodzie ClassLoader.getResources() JDK, która zwraca tylko lokalizacje systemu plików dla przekazanego pustego łańcucha (wskazującego potencjalne źródła wyszukiwania).