@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 的测试类有用(使用 jUnit 4 的SpringRunner运行的测试)。它用于为测试提供配置参数以构成测试配置。它可以是XML,javaconfig(或其组合)的集合。

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

它还允许指定使用什么来加载这些配置(以及其他)。

Spring Boot@Import(SomeConfiguration.class)中的

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

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

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

@ContextConfiguration(classes = SomeConfiguration.class)的意思是只使用这个配置,它不能与 eg 一起使用。DataJpaTest.

最新更新