2012-09-02 124 views
4

我的(基於maven的)項目是由幾個模塊構建而成的。基本上有一個核心模塊和一些模塊,它們可以利用它來向外部提供各種服務。這些模塊之間的「粘合」是「父」模塊。 「父」模塊不應該包含任何代碼。像這樣:enter image description here彈簧和多模塊設置

我想要做的是使用Spring IoC將核心部分注入/自動裝入服務部分。但我似乎無法找到配置的方法。或者至少我似乎找不到一種方法來避免Service部分中的冗餘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> 
+0

我讀過它的真快,但聽起來很像是OSGi的提供 – Eugene

+0

默認事情我讀過這幾次,我不明白問題出在哪裏,請,請解釋一下你的問題。服務模塊在final jar/war中是否可選?服務模塊是否使用核心模塊?核心模塊使用服務模塊嗎? – sinuhepop

+0

看看[這個問題](http://stackoverflow.com /問題/ 7774141 /彈簧依賴性噴射和 - 對lugin-jar)和我的回答 - 它應該給你一個熱點的想法來處理基於多模塊Spring的應用程序。 – Roadrunner

回答

5

我終於想通了,這似乎對現在的工作方式:

  1. 每個模塊擁有/META-INF/spring-<module>.xml
  2. 每個模塊都保持自己的包裹內的代碼他的春天配置,否則context:component-scan將無法​​正常工作
  3. 取決於其他模塊的所有模塊都必須通過應用程序上下文的「configLocations」加載外部模塊配置 - 外部模塊配置應ld被引用與某物。像 「的classpath *:META-INF /彈簧core.xml」

一些言論

  • 的 「類路徑*:」 是什麼呢神奇的 - 因爲它能夠以包括其他來自嵌入式jar文件的資源
  • 該解決方案對我來說仍然有一個缺點,我的IDE(Intellij IDEA)無法解析交叉引用的bean。發生這種情況是因爲「hack」直接通過上下文加載spring-core.xml。不幸的是,我還沒有找到任何其他方式到目前爲止:(
  • 另一件對我造成相當一些痛苦的是,使用某物,如<import resource="classpath*:META-INF/spring-core.xml" />可以被我的IDE所理解,但根本沒有給出所需的結果(如打破context:component-scan配置)
+0

我看到我對這個問題的答案幫助:)不客氣:) – Roadrunner

+0

我的確的確:)(隨意添加它作爲這個問題的「真實」答案) – pagid