簡體   English   中英

Spring 中的 @Import 與 @ContextConfiguration

[英]@Import vs @ContextConfiguration in Spring

注釋的使用有什么不同嗎? 這兩個注釋都允許使用多個@Configuration類來創建一個ApplicationContext 從他們的文檔@ContextConfiguration似乎更適合測試配置並且來自測試的工件( spring-test ),但是,我還沒有發現實際的區別。

感謝您的任何想法!

@Import@ContextConfiguration是不同的使用情況,不能互換使用。

@Import僅對導入其他@Configuration文件有用,並且僅在@Configuration類上有用(和 afaik)和功能。 @Import放在測試類上時,它將不會被處理,因為它不會被處理。

@Configuration
@Import(PersistenceConfig.class)
public class MainConfig {}

例如,如果您禁用了@Configuration類的組件掃描,或者您需要組件掃描未涵蓋的包中的@Configuration類,則使用@Import會很有用。

注意:還有@ImportResource對舊的基於 XML 的配置文件執行相同的操作。

反過來對@ContextConfiguration有效,因為它僅對基於 Spring 的測試類有用(使用SpringRunner for jUnit 4 運行的測試)。 它用於為測試提供配置參數以組成測試配置。 它可以是 XML、javaconfig(或它們的組合)的集合。

@RunWith(SpringRunner.class)
@ContextConfiguration( {MainConfig.class, TestConfig.class})
public MyTest {}

它還允許指定用於加載這些配置的內容(等等)。

在 Spring Boot @Import(SomeConfiguration.class)配置類添加到現有上下文中。 它對測試切片很有用:

@DataJpaTest
@Import(SomeConfiguration.class)
class TestSomething(){...}

在這里,您可以從 SomeConfiguration 類訪問存儲庫和 bean。

@ContextConfiguration(classes = SomeConfiguration.class)意味着使用這個配置,它不能與例如一起使用。 DataJpaTest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM