弹簧和多模块设置

时间:2012-09-02 15:32:02

标签: spring dependency-injection module

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

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

更具体一点 - 使用the Spring documentation中的示例 - 假设这将是其中一个服务模块的配置 - 如何将example.SimpleMovieCatalog配置部件移动到Core模块而不会丢失能够将它们注入“兄弟姐妹”模块中吗?

  <?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>

1 个答案:

答案 0 :(得分:5)

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

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

  5. 一些评论

    • “classpath *:”是神奇的 - 因为它可以在嵌入的jar文件中包含其他资源
    • 此解决方案对我来说仍有一个缺点,我的IDE(Intellij IDEA)无法解析交叉引用的bean。这是因为“hack”直接通过上下文加载spring-core.xml。不幸的是到目前为止我还没有找到任何其他方法:(
    • 另一件让我感到非常痛苦的事情就是使用......像我的IDE理解<import resource="classpath*:META-INF/spring-core.xml" />,但根本没有给出所需的结果(例如,中断context:component-scan配置)