2014-10-09 51 views
1

使用Spring,可以使用通過@Configuration註釋的類來配置應用程序的各個方面。這些配置類可以直接導入或使用類路徑掃描收集。避免對Spring配置類進行類路徑掃描

在我看來,類路徑掃描尤其對配置類有幾個缺點。 一個主要的缺點是,對於多項目(gradle或maven中的子項目),IDE很可能不會同意構建系統上什麼時候進入類路徑。

特別是在我目前的情況下,gradle將隔離每個子項目的類路徑測試資源(src/main/test中的文件),這意味着一個子項目中的測試不會通過類路徑掃描找到來自其他子項目測試的Spring類(除非指定這個)。然而,IntelliJ(13.1.4)並沒有進行這種隔離,導致Gradle和IntelliJ中的測試結果不同。這可以在任何時候重新發生(新的intelliJ或Eclipse版本),並且像任何其他bug一樣,這是一個主要的煩惱。

我們面臨的另一個問題是,Spring提供了運行測試工具包,如

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
public class FooTest {...} 

或者

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
public class FooTest {...} 

由於這些試驗班最終在類路徑中,他們也能狡猾地通過檢測並用作Spring配置來影響其他測試。

因此,掃描類路徑的配置通常很糟糕,或者我們缺少一些明顯的緩解措施?

回答

0

到現在爲止,我通常使用的類路徑掃描謹慎,遵循以下規則:

  • 的配置應僅在同一模塊的掃描包
  • 一個configuratino應該只在它自己或子包
  • 掃描

否則,使用@Import來定位另一個配置似乎好多了。它使意圖和依賴更加明確,並有助於避免類路徑問題。