2008-11-17 9 views
5

J'utilise l'injection de dépendances de Spring, mais j'ai des difficultés à charger une ressource dans mon fichier de configuration Spring.configuration des beans de printemps

La ressource est un fichier XML et se trouve dans un fichier JAR sur mon chemin de classe. J'essaie d'y accéder comme suit:

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

mais je continue à obtenir rencontrer l'erreur suivante:

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

Le fichier JAR est sur le chemin de classe d'un projet Java, qui est à son tour utilisé par mon application web Devrais-je vraiment faire ma configuration Spring dans le projet web par opposition au projet Java, ou est-ce important?

Répondre

10

S'il doit être dans le classpath de votre webapp, alors vous devriez coller le fichier JAR contenant le fichier de configuration dans votre répertoire WEB-INF/lib.

Si vous utilisez une webapp, la convention commune est d'utiliser un ContextLoaderListener pour assurer un WebApplicationContext est inséré dans un endroit standard dans le 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> 

Utilisez ensuite WebApplicationContextUtils pour pêcher le contexte d'application des du contexte de servlet en utilisant:

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

Je ne me souviens pas vraiment pourquoi cette question est importante, mais essayez de mettre un astérisque () devant deux points (:) classpath:/Si thi s ne fonctionne pas, essayez l'astérisque après le deux-points (classpath: *), même si je pense que c'était avant le deux-points.

+0

Je pense que vous faites référence à ceci: http://static.springframework.org/spring/docs/2.5.x/reference/resources.html#resources-classpath-wildcards –

0

J'ai seulement utilisé la directive <import> dans J2SE et cela fonctionne sans le préfixe classpath:, simplement comme <import resource="config/resources.xml" />. Mais dans J2EE si tous vos fichiers sont dans WEB-INF, il devrait être similaire, il suffit d'importer resource = "bla.xml" et il devrait le trouver, bien que dans J2EE vous n'avez pas besoin de le faire car dans web.xml vous peut définir plusieurs fichiers dans le paramètre de contexte contextConfigLocation dans web.xml, il suffit de les séparer par des espaces ou des retours à la ligne.

1

J'ai rencontré un problème similaire avec un plugin red5. Je résolus comme si:

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

Cela regardera partout sur le classpath en premier lieu, y compris dans le pot qui contient mon code. Si une exception se produit, le répertoire du plugin est vérifié. Ce n'est peut-être pas la meilleure solution, mais cela fonctionne.

Questions connexes