注释的使用有什么区别吗?这两个注释都允许使用多个@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 {}
它还允许指定使用什么来加载这些配置(以及其他)。
@Import(SomeConfiguration.class)
中的将配置类添加到现有上下文中。它对测试切片很有用:
@DataJpaTest
@Import(SomeConfiguration.class)
class TestSomething(){...}
在这里,您可以从 SomeConfiguration 类访问存储库和您的 bean。
@ContextConfiguration(classes = SomeConfiguration.class)
的意思是只使用这个配置,它不能与 eg 一起使用。DataJpaTest
.