@Import vs Spring中的@ContextConfiguration

Dmi*_*ich 9 java configuration spring spring-test

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

谢谢你的任何想法!

小智 19

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

@DataJpaTest
@Import(SomeConfiguration.class)
class TestSomething(){...}
Run Code Online (Sandbox Code Playgroud)

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

@ContextConfiguration(classes = SomeConfiguration.class)意味着仅使用配置,该配置无法与例如一起使用。DataJpaTest


M. *_*num 7

@Import并且@ContextConfiguration针对不同的用例而不能使用互换性.

@Import只导入其他有用的@Configuration文件,是唯一有用的(并且据我所知)和功能上@Configuration的类.当把它@Import放在测试类上时,它将是不好的,因为它不会被处理.

@Configuration
@Import(PersistenceConfig.class)
public class MainConfig {}
Run Code Online (Sandbox Code Playgroud)

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

注:也有@ImportResource这确实为较新的基于XML配置文件相同.

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

@RunWith(SpringRunner.class)
@ContextConfiguration( {MainConfig.class, TestConfig.class})
public MyTest {}
Run Code Online (Sandbox Code Playgroud)

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

  • 嗯......在使用Spring Boot时,您实际上可以使用`@ Import`注释测试类.;-) https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-excluding-config (6认同)
  • 这个答案需要修正。`@Import` 也可以用在 Test 类上来导入 TestConfiguration。 (2认同)