注释的使用有什么不同吗?这两个注释都允许使用多个@Configuration
类来创建ApplicationContext
。从他们的文档@ContextConfiguration
似乎更适合测试配置,并来自测试工件(spring-test
),但是,我没有找到实际的差异。
感谢您的任何想法!
答案 0 :(得分:7)
@Import
和@ContextConfiguration
针对不同的用例,不能使用互换性。
@Import
仅对导入其他@Configuration
文件很有用,并且仅对@Configuration
类有用(并具有实用性)和功能。将@Import
放在测试类上时,它将无法正常处理。
@Configuration
@Import(PersistenceConfig.class)
public class MainConfig {}
如果您已禁用@Import
类的组件扫描,或者您需要从组件扫描未涵盖的包中获得@Configuration
类,则使用@Configuration
会很有用。
注意:还有@ImportResource
对旧的基于XML的配置文件也是如此。
反向对@ContextConfiguration
有效,因为这仅对基于Spring的测试类有用(对于jUnit 4,测试使用SpringRunner
运行)。它用于为测试提供配置参数以构成测试配置。它可以是XML,javaconfig(或其组合)的集合。
@RunWith(SpringRunner.class)
@ContextConfiguration( {MainConfig.class, TestConfig.class})
public MyTest {}
它还允许指定用于加载这些配置的内容(以及其他配置)。
答案 1 :(得分:1)
@Import(SomeConfiguration.class)
中将配置类添加到现有上下文中。对于测试切片很有用:
@DataJpaTest
@Import(SomeConfiguration.class)
class TestSomething(){...}
在这里您可以从SomeConfiguration类访问存储库和bean。
@ContextConfiguration(classes = SomeConfiguration.class)
表示只能使用 配置,该配置不适用于例如。 DataJpaTest
。