2012-05-02 14 views
8

wiem, że:Jaka jest różnica między ścieżką klas, systemem plików?

  1. ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

    ładunki definicja kontekstowe z pliku XML znajduje się w ścieżce klasy, traktując jako definicje kontekstowe zasobów ścieżki klasy.

  2. ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");

    ładunki definicja kontekst z pliku XML w systemie plików.

  3. XmlWebApplicationContext

    ładunki definicja kontekst z pliku XML zawartych w aplikacji internetowej.

Ale co to dokładnie oznacza?

Dzięki :)

+4

Już opisano, w jaki sposób różnią się w eksploatacji.Wewnętrznie mają różne zachowania, takie jak XmlWebApplicationContent domyślnie szukają pliku applicationContext.xml w folderze WEB-INF. A także zajmuje parametr init do konfiguracji innej lokalizacji. Zasadniczo będą używać różnych metod ładowania plików XML. – Seshagiri

Odpowiedz

16
  • ClassPathXmlApplicationContext będą czytać pliki z ścieżce klas. Muszą one znajdować się w folderze classes Twojej aplikacji internetowej lub w folderze jar w folderze lib.

  • FileSystemXmlApplicationContext może uzyskać dostęp do całego systemu plików, na przykład c:/config/applicationContext.xml.

  • XmlWebApplicationContext z pewnością może uzyskać dostęp do plików zawartych w aplikacji internetowej, ale to nie jest najważniejsze. Implementuje on WebApplicationContext, co oznacza, że ​​wykryje fasole ServletContextAware, zarejestruje niestandardowe zakresy (żądanie, sesja, ...) między innymi.

+0

To właśnie chcę. Dzięki :) –

0

myślę powyżej opinia może mieć coś złego, FileSystemXmlApplicationContextnie może uzyskać dostęp do całego systemu plików, co może skanować tylko jest cały projekt folder.In celu udowodnienia mój wniosek i złożyć przykład, pierwszy używając ClasspathXmlApplicationContext i wszystko jest w porządku, po raz drugi przenoszę plik beans.xml do folderu na pulpicie, więc nie ma pliku beans.xml w projekcie hirachy, i zmień ClassPathXmlApplicationContext na FileSytemXmlApplicationContext, a coś pójdzie nie tak, śledzenie błędu poniżej:

INFO: Loading XML bean definitions from file [/Users/crabime/Development/IdeaProjects/springInterview/Users/crabime/Desktop/beans.xml] 
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [/Users/crabime/Development/IdeaProjects/springInterview/Users/crabime/Desktop/beans.xml]; nested exception is java.io.FileNotFoundException: Users/crabime/Desktop/beans.xml (No such file or directory) 

Tak F ileSystemXmlApplicationContext może wykryć tylko bieżący projekt cały folder. Na przykład zrobić katalog, który nazwany config w katalogu głównym projektu, można zmienić swój główny kod klasy jak poniżej:

ApplicationContext atx = new FileSystemXmlApplicationContext("/config/beans.xml"); 

i wszystko będzie OK ponownie. Więc jeśli wszyscy jak sinuhepop powiedzieli, myślę, że powinno być coś, co trzeba zmienić.

0

FileSystemXmlApplicationContext- Musisz podać pełną pełną ścieżkę xml fasoli ClassPathXmlApplicationContext - W tym przypadku dawca trzeba ustawić pełną ścieżkę, tak długo, jak ścieżka klasy jest ustawiony

Powiązane problemy