2008-11-17 28 views
5

Estoy usando la inyección de dependencia de Spring, pero me está costando cargar un recurso en mi archivo de configuración de Spring.Configuración de beans de primavera

El recurso es un archivo XML y está en un archivo JAR en mi classpath. Intento acceder a ella de la siguiente manera:

<import resource="classpath:com/config/resources.xml" /> 

sin embargo me siguen dando encontrarse con el siguiente error:

Failed to import bean definitions from URL location [classpath:com/config/resources.xml]

El archivo JAR está en la ruta de clase de un proyecto Java, que es a su vez utilizado por mi Aplicación Web. ¿Debería estar realmente haciendo mi configuración de Spring en el proyecto web en lugar de hacerlo en el proyecto Java, o eso importa?

Respuesta

10

Si necesita estar en el classpath de su aplicación web, entonces debe pegar el archivo JAR que contiene el archivo config en su directorio WEB-INF/lib.

Si estás usando una aplicación de web, entonces la convención común es utilizar un ContextLoaderListener para asegurar una WebApplicationContext se inserta en un lugar estándar en el ServletContext:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/com/config/resources.xml</param-value> 
</context-param> 

A continuación, utilice WebApplicationContextUtils para pescar el contexto de una aplicación fuera del contexto servlet usando:

WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); 
0

realmente no recuerdo qué esto es importante, pero trate de poner un asterisco () delante de los dos puntos (:) ruta de clase:/Si Thi s no funciona, prueba el asterisco después de los dos puntos (classpath: *), aunque creo que fue antes del colon.

+0

Creo que se está refiriendo a esto: http://static.springframework.org/spring/docs/2.5.x/reference/resources.html#resources-classpath-wildcards –

0

Solo he usado la directiva <import> en J2SE y funciona sin el prefijo classpath:, simplemente como <import resource="config/resources.xml" />. Pero en J2EE si todos sus archivos están dentro de WEB-INF, debería ser similar, simplemente importe resource = "bla.xml" y debería encontrarlo, aunque en J2EE no necesita hacer esto porque en web.xml usted puede definir varios archivos en el parámetro de contexto contextConfigLocation dentro de web.xml, simplemente sepárelos con espacios o líneas nuevas.

1

Me encontré con un problema similar con un plugin red5. Lo resolví así:

try { 
    subContext = new FileSystemXmlApplicationContext(new String[] { "classpath*:/myconfig.xml" }, true, context); 
} catch (Exception fnfe) { 
    subContext = new FileSystemXmlApplicationContext(new String[] { "plugins/myconfig.xml" }, true, context); 
} 

Esto se verá primero en cualquier lugar en el classpath, incluso dentro del jar que contiene mi código. Si ocurre una excepción, se comprueba el directorio del complemento. Puede que no sea la mejor solución, pero funciona.

Cuestiones relacionadas