繁体   English   中英

Spring 中的 @Import 与 @ContextConfiguration

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM