WebApplicationContext、DispatcherServlet与web容器的ServletContext关系

    用spring框架开发web应用少不了理解WebApplicationContext、DispatcherServlet与web容器的ServletContext关系。

发现很多贴子,分析了代码,写了一大堆关系,最后还是让人看的云里雾里的。
我相信,一个产品的基本设计思路都是简单明了的,在这个指导下,才写出了复杂的代码。
分析代码最后应该回归到作者的原始思路,这样才能知其然,又知其所以然。


具体代码不贴了,总结如下:

1.web容器可以说就是Servlet容器:ServletContext,启动tomcat必然有这个。web.xml中配置有具体的Servlet,这些都会放在Servlet容器中。

2. dispatcherServlet只是一个具体的Servlet,必然装在Servlet容器里。当然Servlet容器可以装其它任何Servlet,不一定必须有dispatcherServlet。

3. WebApplicationContext是IOC容器,里面是装spring的依赖注入产生的各种bean组件的。可以说与上面的Servlet容器及具体的Servlet没有任何直接联系。通常的IOC容器本来就不仅是给web应用用的。

4. 但是web应用中具体的Servlet处理业务中一般都会使用IOC容器里的组件,所以两个容器之间要有直接引用关系。但是两个容器里的具体内容不应该有直接的引用关系。如同你跨部门协调的时候,总要找他们的领导,不会直接找具体的人员。

5. 所以WebApplicationContext容器会放在ServletContext容器中,这个过程是web.xml中的监听器,监听Servlet容器的启动过程中,先产生IOC容器,并放置在ServletContext里面的。

6. 如果是做其它java应用,可以使用其它IOC容器,比如ApplicationContext (ClasspathXmlApplicationContext,FileSystemXmlApplicationContext),可以在你启动自己应用的时候初始化这个IOC容器对象,并放在一个全局的地方引用着。其它代码就可以从IOC里取自己要的组件了。

引申:
    当我看红黑树的时候,也是一直看不进去,规则多,转换多。但是当我看了2-3树后,就比较理解了红黑树。

    后来进一步想,1972年鲁道夫·贝尔如何去思考发明红黑树呢?平衡二叉树为了平衡,就是平民选择领导的过程,从下到上的逐步平衡的过程,但又不是急于平衡而变动太大,类似2-3树的局部通过加一个节点来缓平衡提高性能。而不是先定好领导,再自上而下的安排座次的过程。社会的平衡也许也是这样。

猜你喜欢

转载自herman-liu76.iteye.com/blog/2393082
今日推荐