@Import vs Spring中的@ContextConfiguration

时间:2018-01-19 12:26:30

标签: java spring configuration spring-test

注释的使用有什么不同吗?这两个注释都允许使用多个@Configuration类来创建ApplicationContext。从他们的文档@ContextConfiguration似乎更适合测试配置,并来自测试工件(spring-test),但是,我没有找到实际的差异。

感谢您的任何想法!

2 个答案:

答案 0 :(得分:7)

@Import@ContextConfiguration针对不同的用例,不能使用互换性。

@Import仅对导入其他@Configuration文件很有用,并且仅对@Configuration类有用(并具有实用性)和功能。将@Import放在测试类上时,它将无法正常处理。

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

如果您已禁用@Import类的组件扫描,或者您需要从组件扫描未涵盖的包中获得@Configuration类,则使用@Configuration会很有用。

注意:还有@ImportResource对旧的基于XML的配置文件也是如此。

反向对@ContextConfiguration有效,因为这仅对基于Spring的测试类有用(对于jUnit 4,测试使用SpringRunner运行)。它用于为测试提供配置参数以构成测试配置。它可以是XML,javaconfig(或其组合)的集合。

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

它还允许指定用于加载这些配置的内容(以及其他配置)。

答案 1 :(得分:1)

在Spring Boot @Import(SomeConfiguration.class)

配置类添加到现有上下文中。对于测试切片很有用:

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

在这里您可以从SomeConfiguration类访问存储库和bean。

@ContextConfiguration(classes = SomeConfiguration.class)表示只能使用 配置,该配置不适用于例如。 DataJpaTest