【问题标题】:Spring and multimodule setups弹簧和多模块设置
【发布时间】:2012-09-02 15:32:02
【问题描述】:

我的(基于 maven 的)项目是由几个模块构建的。基本上有一个核心模块和几个模块,它们利用它向外部提供各种服务。这些模块之间的“粘合剂”是“父”模块。 “父”模块不应该包含任何代码。像这样的东西:

我想做的是使用 Spring IoC 将核心部件注入/自动装配到服务部件中。但我似乎找不到配置它的方法。或者至少我似乎无法找到一种方法来避免服务部分中的冗余 IoC 配置。

更具体地说 - 使用来自 the Spring documentation 的示例 - 假设这将是服务模块之一的配置 - 我如何将 example.SimpleMovieCatalog 配置部分移动到核心模块中而不失去注入它们的能力在“兄弟”模块之一中?

  <?xml version="1.0" encoding="UTF-8"?>
  <beans...>
    <context:annotation-config/>
    <bean class="example.SimpleMovieCatalog">
        <qualifier value="main"/>
    </bean>
    <bean class="example.SimpleMovieCatalog">
        <qualifier value="action"/>
    </bean>
    <bean id="movieRecommender" class="example.MovieRecommender"/>
  </beans>

【问题讨论】:

  • 我读得很快,但听起来很像 osgi 提供的默认内容
  • 我已经读了几遍了,我不明白问题出在哪里。请多解释一下你的问题。最终 jar/war 中的服务模块是可选的吗?服务模块是否使用核心模块?核心模块是否使用服务模块?
  • 看看this question 和我的回答 - 它应该让你知道如何处理基于 Spring 的多模块应用程序。

标签: spring dependency-injection module


【解决方案1】:

我终于想出了一个目前似乎可行的方法:

  1. 每个模块在/META-INF/spring-&lt;module&gt;.xml 中保存他的弹簧配置
  2. 每个模块都必须将其代码保存在自己的包中,否则context:component-scan 将无法正常工作
  3. 依赖于其他模块的所有模块都必须通过应用程序上下文的“configLocations”加载外部模块配置 - 外部模块配置应使用 sth 引用。比如“classpath*:META-INF/spring-core.xml”

一些意见

  • “classpath*:”的神奇之处在于它能够在嵌入的 jar 文件中包含其他资源
  • 这个解决方案对我来说仍然有一个缺点,我的 IDE (Intellij IDEA) 无法解析交叉引用的 bean。这是由于直接通过上下文加载 spring-core.xml 的“hack”。不幸的是,到目前为止我还没有找到任何其他方法:(
  • 另一件让我很痛苦的事情是使用某物。像 &lt;import resource="classpath*:META-INF/spring-core.xml" /&gt; 这样我的 IDE 可以理解,但根本没有给出想要的结果(例如打破 context:component-scan 配置)

【讨论】:

  • 我看到我对另一个问题的回答有帮助:)不客气:)
  • 我确实做到了:)(也可以将其添加为这个问题的“真实”答案)
猜你喜欢
  • 2010-10-19
  • 2018-09-27
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多