2012-05-02 649 views
8

sé que:¿Cuál es la diferencia entre la ruta de clases, el sistema de archivos?

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

    cargas definición de contexto desde un archivo XML ubicado en la ruta de clases, el tratamiento de definiciones de contexto como recursos de ruta de clases.

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

    cargas definición del contexto de un archivo XML en el sistema de archivos.

  3. XmlWebApplicationContext

    cargas definición del contexto de un archivo XML contenida dentro de una aplicación web.

Pero, ¿qué significa exactamente?

Gracias :)

+4

Usted ya se ha descrito la forma en que son diferentes en uso.Internamente tienen comportamientos diferentes, como XmlWebApplicationContent de forma predeterminada buscará applicationContext.xml en la carpeta WEB-INF. Y también toma el parámetro init para configurar diferentes ubicaciones. Básicamente, usarán diferentes enfoques para cargar los archivos XML. – Seshagiri

Respuesta

16
  • ClassPathXmlApplicationContext puedan leerlas archivos de la ruta de clases. Deben estar en la carpeta classes de su aplicación web o en un jar en su carpeta lib.

  • FileSystemXmlApplicationContext puede acceder a todo su sistema de archivos, por ejemplo c:/config/applicationContext.xml.

  • XmlWebApplicationContext ciertamente puede acceder a los archivos contenidos en su aplicación web, pero esto no es lo más importante. Implementa WebApplicationContext y esto significa que detectará ServletContextAware beans, registrará ámbitos personalizados (solicitud, sesión, ...) entre otras cosas.

+0

Eso es lo que quiero exactamente. Gracias :) –

0

creo opinión anterior puede tener algo mal, FileSystemXmlApplicationContextno puede acceder a su sistema de archivos entero, lo que sólo puede escanear todo el proyecto es folder.In fin de demostrar mi conclusión hago un ejemplo, el primer utilizando ClasspathXmlApplicationContext y todo es normal, la segunda vez que se mueve el archivo beans.xml a mi carpeta del escritorio, por lo que no hay ningún archivo beans.xml en el hirachy proyecto y cambiar ClassPathXmlApplicationContext a FileSytemXmlApplicationContext y algo va mal, vestigios de error a continuación:

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) 

So F ileSystemXmlApplicationContext solo puede detectar todas las carpetas del proyecto actual. Por ejemplo haces un directorio que nombró config bajo el directorio raíz del proyecto, y se puede cambiar el código de la clase principal, como a continuación:

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

y todo estará bien de nuevo. Entonces, si todos, como sinuhepop, dijeran, creo que debería haber algo que cambiar.

0

FileSystemXmlApplicationContext- es necesario proporcionar ruta completa completa de frijol xml ClassPathXmlApplicationContext - En este caso DONOT necesita establecer la ruta completa, siempre y cuando se establece la ruta de clase

Cuestiones relacionadas