GenericWebApplicationContext

GenericWebApplicationContext

我正在用TestNG和spring-test编写单元测试,该单元测试通过@ContextConfiguration加载xml上下文,并通过@WebAppConfiguration加载调度程序servlet。我有一个像blow这样的类,它获取上下文并打印上下文类型。

@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");
        }
    }
}


测试类别:

@ContextConfiguration(value = "classpath:integration-context-test.xml")
@TestPropertySource(locations = {"classpath:temp.properties"})
@WebAppConfiguration
public class TaskTest extends AbstractTransactionalTestNGSpringContextTests {}



为什么控制台打印"3"并显示为GenericWebApplicationContext?什么时候会返回提到的其他两种类型?使用TestNG时能否在书面XmlWebApplicationContext类中获取ApplicationContextInitializer

最佳答案

为什么控制台打印"3"并显示为GenericWebApplicationContext


在使用Spring TestContext Framework的集成测试中,如果用ApplicationContext注释测试类,则GenericWebApplicationContext@WebAppConfiguration。否则,它将是GenericApplicationContext

集成测试的ApplicationContextContextLoader加载。在您的示例中,具体实现是GenericXmlWebContextLoader。这是因为您为XML配置文件指定了locations


  什么时候会返回提到的其他两种类型?


在集成测试中,它不会返回您提到的其他类型,因为Spring TestContext Framework中的所有ContextLoader实现都会创建GenericApplicationContextGenericWebApplicationContext


  使用TestNG时可以在书面XmlWebApplicationContext类中获取ApplicationContextInitializer吗?


不,不是在测试中。

但是您通常不需要依赖它为XmlWebApplicationContext。知道它是ConfigurableWebApplicationContext(因此是WebApplicationContext)通常在生产代码和测试中就足够了。

09-10 19:22