XmlWebApplicationContext、AnnotationConfigWebApplicationContext 和 GenericWebApplicationContext 之间有什么区别
What is the difference between XmlWebApplicationContext, AnnotationConfigWebApplicationContext, and GenericWebApplicationContext
我正在使用 TestNG 和 spring-test 编写单元测试,它通过 @ContextConfiguration
加载 xml 上下文并通过 @WebAppConfiguration
加载调度程序 servlet。我有一个像 blow 的 class 获取上下文并打印上下文类型。
@Component
public class ApplicationContextInitializer implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextInitializer.applicationContext = applicationContext;
if (applicationContext instanceof AnnotationConfigApplicationContext) {
System.out.println("1");
}
if (applicationContext instanceof GenericWebApplicationContext) {
System.out.println("3");
}
if (applicationContext instanceof GenericXmlApplicationContext) {
System.out.println("4");
}
if (applicationContext instanceof ResourceAdapterApplicationContext) {
System.out.println("5");
}
if (applicationContext instanceof StaticApplicationContext) {
System.out.println("6");
}
if (applicationContext instanceof XmlWebApplicationContext) {
System.out.println("7");
}
if (applicationContext instanceof AnnotationConfigWebApplicationContext) {
System.out.println("8");
}
}
}
测试class:
@ContextConfiguration(value = "classpath:integration-context-test.xml")
@TestPropertySource(locations = {"classpath:temp.properties"})
@WebAppConfiguration
public class TaskTest extends AbstractTransactionalTestNGSpringContextTests {}
为什么控制台打印"3"
,显示是GenericWebApplicationContext
? return 什么时候会提到另外两种类型?使用 TestNG 时是否可以将 XmlWebApplicationContext
写成 ApplicationContextInitializer
class?
Why the console prints "3"
, showing that it is GenericWebApplicationContext
?
在使用 Spring TestContext Framework 的集成测试中,如果您注释测试 [=45],ApplicationContext
是 GenericWebApplicationContext
=] 与 @WebAppConfiguration
。否则,它将是 GenericApplicationContext
.
集成测试的 ApplicationContext
由 ContextLoader
加载。在您的示例中,具体实现是 GenericXmlWebContextLoader
。那是因为您为 XML 配置文件指定了 locations
。
When will it return two other types mentioned?
在集成测试中,它不会 return 您提到的其他类型,因为 Spring TestContext Framework[=43] 中的所有 ContextLoader
实现=] 创建 GenericApplicationContext
或 GenericWebApplicationContext
.
Is it possible to get XmlWebApplicationContext
in written ApplicationContextInitializer
class while using TestNG?
不,不在测试中。
但您通常不需要依赖它作为 XmlWebApplicationContext
。知道它是 ConfigurableWebApplicationContext
(因此是 WebApplicationContext
)通常在生产代码和测试中都足够了。
我正在使用 TestNG 和 spring-test 编写单元测试,它通过 @ContextConfiguration
加载 xml 上下文并通过 @WebAppConfiguration
加载调度程序 servlet。我有一个像 blow 的 class 获取上下文并打印上下文类型。
@Component
public class ApplicationContextInitializer implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextInitializer.applicationContext = applicationContext;
if (applicationContext instanceof AnnotationConfigApplicationContext) {
System.out.println("1");
}
if (applicationContext instanceof GenericWebApplicationContext) {
System.out.println("3");
}
if (applicationContext instanceof GenericXmlApplicationContext) {
System.out.println("4");
}
if (applicationContext instanceof ResourceAdapterApplicationContext) {
System.out.println("5");
}
if (applicationContext instanceof StaticApplicationContext) {
System.out.println("6");
}
if (applicationContext instanceof XmlWebApplicationContext) {
System.out.println("7");
}
if (applicationContext instanceof AnnotationConfigWebApplicationContext) {
System.out.println("8");
}
}
}
测试class:
@ContextConfiguration(value = "classpath:integration-context-test.xml")
@TestPropertySource(locations = {"classpath:temp.properties"})
@WebAppConfiguration
public class TaskTest extends AbstractTransactionalTestNGSpringContextTests {}
为什么控制台打印"3"
,显示是GenericWebApplicationContext
? return 什么时候会提到另外两种类型?使用 TestNG 时是否可以将 XmlWebApplicationContext
写成 ApplicationContextInitializer
class?
Why the console prints
"3"
, showing that it isGenericWebApplicationContext
?
在使用 Spring TestContext Framework 的集成测试中,如果您注释测试 [=45],ApplicationContext
是 GenericWebApplicationContext
=] 与 @WebAppConfiguration
。否则,它将是 GenericApplicationContext
.
集成测试的 ApplicationContext
由 ContextLoader
加载。在您的示例中,具体实现是 GenericXmlWebContextLoader
。那是因为您为 XML 配置文件指定了 locations
。
When will it return two other types mentioned?
在集成测试中,它不会 return 您提到的其他类型,因为 Spring TestContext Framework[=43] 中的所有 ContextLoader
实现=] 创建 GenericApplicationContext
或 GenericWebApplicationContext
.
Is it possible to get
XmlWebApplicationContext
in writtenApplicationContextInitializer
class while using TestNG?
不,不在测试中。
但您通常不需要依赖它作为 XmlWebApplicationContext
。知道它是 ConfigurableWebApplicationContext
(因此是 WebApplicationContext
)通常在生产代码和测试中都足够了。