我正在使用春季启动项目。我想了解不同背景的目的和关系吗?
例如,Spring Security上下文,Spring Context,Servlet Context等(还有更多上下文吗?)
答案 0 :(得分:8)
可以有不同的解释,但这是我如何看待它:
Spring Security上下文,在SecurityContext类的含义中,包含身份验证,用户名,权限(角色)以及可能有关当前用户的其他信息。此类上下文的生命周期是当前请求,或者使用会话的请求之间保持安全上下文。
Spring Context ,在ApplicationContext类的含义中,是运行Spring应用程序的中心点。它的主要目的是包含app singleton bean,但它有许多其他漂亮的功能(在另一个答案中提到了几个)。一个应用程序可以有几个ApplicationContexts,但最常见,最简单的情况是,它只有一个。 Web应用程序通常使用WebApplicationContext“扩展名”,它将其与Servlet上下文集成。
Servlet Context ,ServletContext类的含义,是Servlet webapp所具有的应用程序范围的上下文。在像Tomcat这样的servlet容器中,每个webapp实例总是只有一个。它不是Spring的一部分。使用Spring时很少直接使用它。但它就在后台。
“上下文”是一个非常通用的术语,因此在您的环境中也可能存在其他上下文。
答案 1 :(得分:6)
有很多"背景"以及它们的加载方式取决于您初始化应用程序的方式。但通常大多数应用程序都有一个上下文,其中包含应用程序所需的所有bean和组件。
例如,如果您使用Servlet加载应用程序,则可以使用" root上下文加载整个#34;这也加载了Servlet Context作为它的孩子。
层次结构类似于以下"root" context
- > any other context
。就这么简单。
描述here in the Spring Docs ApplicationContext
提供:
new()
)当您使用Spring启动时,默认情况下只有一个上下文:ApplicationContext
。这将包含您需要的所有东西(豆类)和组件。
事实上,使用Spring启动,最小配置和简化配置的美妙之处。如果您认为需要多个上下文,我会建议您使用Profiles代替。
最终"语境"由应用程序创建和定义,将其视为定义应用程序的配置(无论是XML还是Java)。什么"在其中"什么"它需要"上班。
如果你想尝试更多地理解它,我会敦促你从头开始阅读并从Introduction to Spring开始。
答案 2 :(得分:3)
在系统设计方面,任何Context都是一个通用功能和数据的集合,它们在一个地方定义,但必须在程序的任何地方使用。 Context的主要目的 - 减少应用程序组件之间的依赖关系数量。 Context的另一个目的 - 简化对常用功能和数据的访问。让我们考虑一下您在问题中列出的上下文。
<强> ServletContext的强>
ServletContext
是Servlet technology的一部分。许多框架都基于这种技术( JSF,Spring,Struts以及更多)。 ServletContext
包含与其Servlet容器(,如Tomcat,Glassfish等)进行通信的功能。 ServletContext
提供的基本内容:
如您所见,只有基本功能,如果您将使用Servlet技术(例如,基于它开发另一个mvc框架),那么它在应用程序的任何地方都很有用。
<强>的ApplicationContext 强>
ApplicationContext
是Spring framework应用程序的主要界面。它有很多实现。其中一个从xml-file( ClassPathXmlApplicationContext )加载配置,另一个基于注释( AnnotationConfigApplicationContext )加载配置,依此类推。 ApplicationContext
提供的基本内容:
同样,在开始时初始化,这个基本功能几乎可以在您的应用程序的任何位置使用。这就是为什么它收集到上下文。在后台使用的许多类,为了使用此功能而提供此功能,但您必须知道所有这些功能 - 只需ApplicationContext
。
<强> SecurityContext的强>
SecurityContext
提供对身份验证数据的访问。您可以获取经过身份验证的用户,角色和其他详细信息的名称。许多地方可能需要安全模块初始化的这些信息。使用此信息的组件对安全模块的类别一无所知。他们只是从SecurityContext
获得所有必需的信息。