我目前正在研究spring注解@ContextConfiguration的用途 我想知道 @Import 注释有什么区别。
事实上,当我使用这些片段时..
@ExtendWith(SpringExtension.class)
@Import({SpringService.class,SpringService2.class})
public class Snippet1 {
@Autowired
SpringService springService;
@Autowired
SpringService2 springService2;
@Test
public void test() {
Assertions.assertNotNull(springService);
Assertions.assertNotNull(springService2);
}
}
或者这个..
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {SpringService.class,SpringService2.class})
public class Snippet2 {
@Autowired
SpringService springService;
@Autowired
SpringService2 springService2;
@Test
public void test() {
Assertions.assertNotNull(springService);
Assertions.assertNotNull(springService2);
}
}
一模一样! 适合度是多少?
谢谢。
在您使用的示例中,它们的行为是相同的。导入注释允许您将多个配置类组合在一起:https://docs.spring.io/spring-framework/reference/core/beans/java/composition-configuration-classes.html#beans-java-using-import
您的 Snippet2 示例可以使用带有 @Import 注释的类:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {Snippet1 .class})
public class Snippet2 {
@Autowired
SpringService springService;
@Autowired
SpringService2 springService2;
@Test
public void test() {
Assertions.assertNotNull(springService);
Assertions.assertNotNull(springService2);
}
}
以这种方式使用 @Import 可以让您不必重复定义 ContextConfiguration 中相同的类列表。您还希望使用 @Configuration 注释来标记它,而不使用 @ExtendsWith 注释,因为您只是使用它来定义配置:
@Configuration
@Import({SpringService.class,SpringService2.class})
public class Snippet1 {
}
Spring 的文档非常棒,我建议您阅读我发布的链接。