4

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

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

更具体地说 - 使用Spring 文档中的示例- 假设这将是服务模块之一的配置 - 我如何将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>
4

1 回答 1

5

我终于想出了一种现在似乎可行的方法:

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

一些备注

  • “classpath*:” 有什么魔力——因为它可以在嵌入的 jar 文件中包含其他资源
  • 这个解决方案对我来说仍然有一个缺点,我的 IDE (Intellij IDEA) 无法解析交叉引用的 bean。这是由于直接通过上下文加载 spring-core.xml 的“hack”。不幸的是,到目前为止我还没有找到任何其他方法:(
  • 另一件给我带来相当痛苦的事情是使用某物。我的IDE可以理解like <import resource="classpath*:META-INF/spring-core.xml" />,但根本没有给出想要的结果(例如中断context:component-scan配置)
于 2012-09-06T14:01:21.813 回答