Java 从WAR中的其他Maven模块导入SpringBean?

Java 从WAR中的其他Maven模块导入SpringBean?,java,spring,servlets,jar,javabeans,Java,Spring,Servlets,Jar,Javabeans,我有一个新的web应用程序,作为多模块Maven项目的一部分打包为WAR。此WAR的applicationContext.xml引用从“服务”模块导入的bean,而“服务”模块又从“dao”模块导入bean。applicationContext.xml中的import语句如下所示: <import resource="classpath*:service.xml" /> <import resource="classpath*:dao.xml" /> 所有导入的bea

我有一个新的web应用程序,作为多模块Maven项目的一部分打包为WAR。此WAR的applicationContext.xml引用从“服务”模块导入的bean,而“服务”模块又从“dao”模块导入bean。applicationContext.xml中的import语句如下所示:

<import resource="classpath*:service.xml" />
<import resource="classpath*:dao.xml" />
所有导入的bean XML文件都可以在WEB-INF/lib目录中各自的JAR文件中找到。实际上,抛出错误的服务bean本身是在服务模块的JAR文件中的service.xml文件中定义的

显然,服务模块找不到它从dao模块导入的bean。很明显,我不明白一些事情……看起来这应该是这样的吗?

应该是这样的

<import resource="classpath:service.xml"/>

类路径:thingy.xml和
类路径*:thingy.xml
符号之间的区别在于前者使用标准类路径机制解析一个资源(使用),而后者将用于检索类路径上的所有匹配资源,这种区别在您的情况下应该是不相关的,因为我猜类路径上只有一个
dao.xml
文件

我认为你的问题是不同的,你缺少了一个前导斜杠

将其用于单个资源

<import resource="classpath:/dao.xml" />

这是多个资源的一个例子

<import resource="classpath*:/dao.xml" />

  • 弹簧参考:
  • Sun JavaDocs:

您是否有多个applicationContexts,并且父上下文可能是指在子上下文中定义的bean?

我启用了“org.springframework”的调试日志记录,以查看我是否可以学到任何东西。我发现了一些消息,大意是DAOBean已经创建,但也有一条消息说它们没有名字或id

我检查了文件,他们都有身份证。那是什么?我检查了XML名称空间,发现:

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
注意到它很旧(我正在使用Spring 3.0.2),并将其更改为:

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
一旦我更改了它,Spring立即抛出了六个关于定义错误的bean的错误(但显然从未使用过)。一旦我纠正了这些错误,一切都正常了。此后,我检查了整个系统,检查了SpringXML文件名称空间版本


谢谢大家的帮助。真不敢相信我在这件蠢事上浪费了一天

如果我这样做,那么SpringSTS、Eclipse都会警告未定义的bean,并且构建会因为未定义的bean而导致集成测试失败。没问题。谢谢你的帮助。不幸的是,我仍然有同样的问题。然而,SpringSTS、Eclipse和Maven似乎并不介意缺少星号@HDave您的依赖结构是什么?您的xml文件是否直接位于类路径中的jar中?是的。service.xml位于WEB-INF/lib中的service.jar中。它引用persist.xml,它位于persist.jar中,persist.jar也位于WEB-INF/lib中。就我所知,我只有一个applicationContext,所有bean都应该在这个上下文中。很好地了解星号,感谢链接。但是,将前导斜杠放进去没有任何效果。您是否验证了xml文件实际上在JAR中?是的。我打开了war,然后找到了JAR,然后打开JAR,找到了xml文件,然后打开了xml文件,找到了bean。然后我想你必须调试bean定义解析器。在org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(元素)中设置断点在设置断点之前,我决定启用调试日志记录。在日志中,我发现了一个提示,并根据它找到了根本原因。看答案……真不敢相信我在这愚蠢的事情上浪费了一天,这不是最后一次了。根据我的经验,构建强大的功能所需的时间比追踪愚蠢的、看起来无辜的bug所需的时间要少得多。
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd