这两个注解的使用有什么区别吗?两个注解都允许使用多个@Configuration
类来创建一个ApplicationContext
。从它们的文档来看,@ContextConfiguration
似乎更适合测试配置,并来自于一个专门用于测试的构件(spring-test
),但我还没有找到实际上的区别。
感谢您的任何想法!
这两个注解的使用有什么区别吗?两个注解都允许使用多个@Configuration
类来创建一个ApplicationContext
。从它们的文档来看,@ContextConfiguration
似乎更适合测试配置,并来自于一个专门用于测试的构件(spring-test
),但我还没有找到实际上的区别。
感谢您的任何想法!
@Import
和 @ContextConfiguration
用于不同的情况,不能互换使用。
@Import
只能用于导入其他 @Configuration
文件,并且只有在 @Configuration
类上才是有效的(就我所知),而且只能使用在 @Configuration
类上。如果将 @Import
放在测试类上,它将无效。
@Configuration
@Import(PersistenceConfig.class)
public class MainConfig {}
使用@Import
可能很有用,例如,如果您已禁用组件扫描以用于@Configuration
类,或者您需要来自未被组件扫描覆盖的包的@Configuration
类。
注意:还有@ImportResource
,它对旧的基于XML的配置文件执行相同的操作。
@ContextConfiguration
则适用于仅在基于Spring的测试类(使用SpringRunner
运行的jUnit 4测试)上。 它用于为测试提供配置参数以构成测试配置。可以是XML、Javaconfig(或两者的组合)的集合。
@RunWith(SpringRunner.class)
@ContextConfiguration( classes = {MainConfig.class, TestConfig.class})
public MyTest {}
它还允许指定用于加载这些配置的内容(以及其他内容)。
ContextCongifuration
可以与XML或Java配置一起使用:从Spring 3.1开始,上下文加载器可以选择支持基于路径或基于类的资源。- Dmitry Senkovich
@Import
进行注解。;-) https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-excluding-config - Sam Brannen@Import
也可以在测试类上使用,以导入 TestConfiguration
。 - Amith Kumar在Spring Boot中,@Import(SomeConfiguration.class)
将一个配置类添加到现有的上下文中。它在测试片段中非常有用:
@DataJpaTest
@Import(SomeConfiguration.class)
class TestSomething(){...}
在这里,您可以访问SomeConfiguration类中的存储库和bean。
@ContextConfiguration(classes = SomeConfiguration.class)
表示仅使用此配置,可能无法与例如DataJpaTest
一起使用。
@ContextConfiguration
只能在测试中使用,在其他代码中它没有任何作用。@Import
在测试中是无用的,只有在@Configuration
类中才有用,可以导入其他配置类(使用@ImportResource
可以导入 XML 配置文件)。 - M. Deinum@Import
(也称为包含、加载等)其他Java配置类。例如,那些没有被组件扫描覆盖的类(或者您可能已禁用了对@Configuration
文件的组件扫描)。或者创建一个单独的测试配置,该配置导入原始配置,以便您可以覆盖bean... - M. Deinum@Import
,为什么要在这里使用@ContextConfiguration
?如果我很傻,请原谅我 :) - Dmitry Senkovich@Import
只对@Configuration
类有用(并且是有效的)。它在测试类上不起作用,唯一的作用就是占用一行代码。 - M. Deinum