我有一个新的 Web 应用程序,它作为多模块 Maven 项目的一部分打包为 WAR。此 WAR 的 applicationContext.xml 引用从“service”模块导入的 beans,后者又从“dao”模块导入 beans。 applicationContext.xml 中的导入语句如下所示:
<import resource="classpath*:service.xml" />
service.xml 文件中的内容如下所示:
<import resource="classpath*:dao.xml" />
Spring STS 和 Eclipse 都没有在我的 bean 文件中显示任何警告或错误。我到处都引用了进口 bean 。 Maven 构建工作正常,DAO 集成测试全部通过(他们使用 bean)。我还没有任何服务集成测试。
但是当我在 Jetty 中启动 WAR 时出现错误:
Error creating bean with name 'securityService'
Cannot resolve reference to bean 'userDAO' while setting constructor argument
所有导入的 bean XML 文件都可以在 WEB-INF/lib 目录中各自的 JAR 文件中找到。实际上,抛出错误的服务 bean 本身是在服务模块的 JAR 文件内的 service.xml 文件中定义的。
显然,服务模块找不到它从 dao 模块导入的 bean。显然我不明白某些事情...似乎应该这样才行?
最佳答案
我为“org.springframework”启用了 DEBUG 日志记录,以查看是否可以学到任何东西。我发现的消息大意是 DAO bean 已创建,但也有消息称它们没有名称或 ID。
我检查了文件,它们都有一个 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 的错误。修复这些错误后,一切正常。从那以后,我检查了整个系统,检查 Spring XML 文件命名空间版本。
感谢大家的帮助。不敢相信我在这种愚蠢的事情上浪费了一天!!
关于java - 从 WAR 中的其他 Maven 模块导入 Spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781755/