Spring Beans配置

5

我正在使用Spring的依赖注入,但在加载Spring配置文件中的资源时遇到了困难。

该资源是一个XML文件,它位于我的类路径上的JAR文件中。我尝试按以下方式访问它:

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

然而我一直遇到以下错误:

从URL位置[classpath:com / config / resources.xml]导入bean定义失败

该JAR文件位于Java项目的类路径上,而该Java项目又被我的Web应用程序使用。 我应该在Web项目中配置Spring,而不是Java项目吗? 这是否有关紧要?

4个回答

10
如果需要将其放入Web应用程序的类路径中,则应将包含配置文件的JAR文件放入WEB-INF/lib目录中。如果使用Web应用程序,则通常惯例是使用ContextLoaderListener来确保将WebApplicationContext插入到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>

然后使用 WebApplicationContextUtils 通过以下方式从servlet上下文中获取应用程序上下文:

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

1

我曾遇到一个与red5插件类似的问题。我是这样处理的:

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

这将首先在类路径上的任何位置查找,包括包含我的代码的jar文件中。如果发生异常,则会检查插件目录。这可能不是最好的解决方案,但它可以工作。


0
我不太记得这为什么重要,但是尝试在冒号(:) 和“classpath”之间加上星号( ),如此:classpath: /。如果这样不起作用,请尝试在冒号后面添加星号(classpath:*),虽然我认为它应该放在冒号前面。

我认为你指的是这个链接:http://static.springframework.org/spring/docs/2.5.x/reference/resources.html#resources-classpath-wildcards - matt b

0

我只在J2SE中使用了<import>指令,并且它可以不使用前缀classpath:,像这样简单地使用:<import resource="config/resources.xml" />。但是在J2EE中,如果所有文件都在WEB-INF内部,则应该类似,只需导入资源“bla.xml”,并且它应该可以找到它,虽然在J2EE中您不需要这样做,因为在web.xml中您可以定义contextConfigLocation上下文参数中的多个文件,只需用空格或换行符分隔即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接