Spring 中的@Import 与@ContextConfiguration

@Import vs @ContextConfiguration in Spring

注解的用法有什么区别吗?这两个注释都允许使用多个 @Configuration 类 来创建一个 ApplicationContext。从他们的文档来看 @ContextConfiguration 似乎更适合测试配置,并且来自测试的工件 (spring-test),但是,我还没有发现实际的区别。

感谢您的任何想法!

@Import and @ContextConfiguration 用于不同的用例,不能互换使用。

@Import 仅对导入其他 @Configuration 文件有用,并且仅在 @Configuration class 上有用(和 afaik)和功能。当把 @Import 放在测试 class 上时,它不会很好,因为它不会被处理。

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

使用 @Import 会很有用,例如,如果您禁用了 @Configuration classes 的组件扫描,或者您需要来自 @Configuration class组件扫描未涵盖的包。

注意: 还有 @ImportResource 对旧的基于 XML 的配置文件做同样的事情。

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

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

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

在 Spring 引导 @Import(SomeConfiguration.class) 添加 配置 class 到现有上下文。它对测试切片很有用:

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

在这里,您可以从 SomeConfiguration class.

访问存储库和 bean

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