关于SpringMVC的ContextLoader类中的一个疑问

我一直不太明白,在initWebApplicationContext方法的第一行,

 if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
            throw new IllegalStateException(
                    "Cannot initialize context because there is already a root application context present - " +
                    "check whether you have multiple ContextLoader* definitions in your web.xml!");
        }

请问各位大佬,难道servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) 何时不等于null呢??为什么要判断一下不等于null呢?服务刚启动的时候,还有不等于null的时候吗?之前学习servlet的时候并没有太认真学,还请各位大神帮忙解释一下,在此感谢

没看它抛异常的翻译嘛。
不能初始化context,因为已经有一个root应用context存在。检查你的web.xml中是否有多个ContextLoader 定义 。

http://blog.csdn.net/lmb55/article/details/50510547

这个就是编程的严谨性啊,要往一个容器里放东西,先要判断一下容器里有没有东西。
逻辑性严密,才不容易出错。

了解下 Java 的类加载机制就可以知道了.
他这是确保 WebApplicationContext 已被初始化.

健壮性的体现,防止瞎狗乱写

由于已经存在根应用程序上下文,因此无法初始化上下文

检查你的web.xml中是否有多个ContextLoader 定义

翻译

我已经知道答案了,spring3.0之前,启动的方式有两种ContextLoaderListener和ContextLoaderServlet,spring不知道是listener还是servlet,所以才判断一下,3.0之后,ContextLoaderServlet这个类被删除了,也就是说只有一个ContextLoaderListener了,但是他为了以后有可能在加上类似ContextLoaderServlet类,所以没有删掉这个if判断,但是对于现在来说,这个if判断,果然没有一点用途,因为它百分之百是null,spring不加新特性的话,它永远不会走if里的内容,这才是我想要的答案,你们这些人其实和我一样,对spring一知半解,但是不如我,因为我知道问,你们知道不懂装懂