发现自己其实还没有很好的理解 Spring和Web容器的交互,Spring 的IOC容器究竟是什么呢?Spring MVC 是如何依赖IOC体系在Web容器中运转的呢?仔细翻看看了《Spring内幕》这本书,发现其中都有答案,只不过之前看的太浅,不太理解;所谓的看山是山,看山不是山,看山还是山,大概就是这样吧。又一次从心底折服老师的三遍学习法和对比学习法。
废话不多说了,其实在Web环境中的Spring MVC(一)中已经表述的很清楚了,但是其中的字符太多了,接口和接口、实现类和子类都搞的头发长,慢慢的一篇字符让人看得欲望都没有了。还是看图吧。
其中XmlWebApplicationContext是Spring IOC容器默然的实现类,双亲容器和子容器都是由它来实现的,当然也可以指定实现类;另外还需要知道ContextLoaderListener类、ContextLoader类以及ServletContextListener接口之间的关系(草图中会展示)。
针对Web容器,Spring会在Web.xml中至少配置四个标签,其中一个ContextLoaderListener(监听器)是启动跟Ioc容器并把它加载到Web容器的主要模块,通过加载过程可以看到,首先从Servlet事件中得到ServletContext,,然后可以读取配置在Web.xml中的各个相关属性,接着ContxtLoadr会实例化WebApplicationContxt,并完场其载入和初始化的过程。
草图确实有点草蛋,但是我还没有找到更好的替代的图,可能只有很少的人能看懂,如果有合适的图,我就把草图换了,大家可以看《Spring技术内幕》.page(154)。这篇博客可以说是对上一篇的细致描述,除了没有分享源码外,其他的大概都在里面了。有兴趣的可以看看源码,Spring是如何设置默认的实现类为XmlApplicationContext?子上下文是如何共享调用根上下文的。