Servlet上下文和Spring应用上下文的本质区别

4
我正在阅读Spring框架的文档,现在我看到了应用程序作用域概念。文档对这个概念的解释是:

它与Spring单例bean有些相似,但有两个重要的不同之处:它是一个ServletContext的单例,而不是一个Spring ApplicationContext的单例。

对我来说,不清楚的是Spring应用程序上下文和Servlet上下文之间的关系如何想象。
我认为它们之间的关系有两种可能的情况:

I

enter image description here

II

enter image description here

那么,Spring应用上下文与Servlet上下文有什么关系呢?它是情况I还是情况II或者两者都不是?


1
根据您的评论,@BalusC。Spring应用程序上下文!=应用程序上下文?您的意思是什么? - St.Antario
编程术语“应用程序上下文”是模棱两可的,因为它也适用于其他框架,它并不符合“Spring应用程序上下文”的定义。我刚刚编辑了问题,使其更加明确。 - BalusC
1个回答

9

这不是两者中的任何一个。

ServletContext是 Java EE 标准的应用程序范围。每个已部署的 Web 应用程序都只有一个 Servlet 上下文。

在此 Web 应用程序内部,您可以拥有一个(通常)或多个 Spring 应用程序上下文:每个 Spring-MVC 调度程序 Servlet 一个。


谢谢您的回答,但我想澄清其他细节。众所周知,Spring中的单例作用域bean在每个ApplicationContext中是唯一的。而__GoF Singleton__则假定该实例在__ClassLoader__中是唯一的。那么__Servlet Context__与__ClassLoader__有什么关系呢?我的意思是哪个“更大”? - St.Antario
ClassLoader是“更大”的。在Java EE容器中,每个Web应用程序都有自己的ClassLoader,它从WEB-INF/classes和WEB-INF/lib中加载类。这里的Singleton并不真正涉及到经典的GoF(反)模式。它只是意味着:应用程序上下文中只有一个bean实例。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接