弹簧和多模块设置

pag*_*gid 4 spring dependency-injection module

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

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

更具体一点 - 使用Spring文档中的示例- 假设这将是其中一个服务模块的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>
Run Code Online (Sandbox Code Playgroud)

pag*_*gid 5

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

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

一些评论

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