@Import与春季@ContextConfiguration

2022-09-01 17:38:11

批注的用法有什么不同吗?这两个注释都允许使用多个类来创建 .从他们的文档似乎更适合测试配置,并且来自测试的工件(),但是,我还没有找到实际的区别。@ConfigurationApplicationContext@ContextConfigurationspring-test

感谢您的任何想法!


答案 1

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

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

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

例如,如果您禁用了类的组件扫描,或者您需要组件扫描未涵盖的包中的类,则 使用 可能很有用。@Import@Configuration@Configuration

注意:还有一@ImportResource它对基于 XML 的旧配置文件执行相同的操作。

反之亦然,因为它仅在基于Spring的测试类上有用(测试与jUnit 4一起运行)。它用于为测试提供配置参数以组成测试配置。它可以是XML,javaconfig(或其组合)的集合。@ContextConfigurationSpringRunner

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

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


答案 2

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

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

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

@ContextConfiguration(classes = SomeConfiguration.class)意味着只使用此配置,这不能与例如一起使用。.DataJpaTest


推荐