首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring中不同上下文的目的和关系

Spring中不同上下文的目的和关系
EN

Stack Overflow用户
提问于 2016-03-03 20:36:40
回答 3查看 3K关注 0票数 21

我正在使用一个spring boot项目。我想了解不同上下文的目的和关系?

例如,Spring Security context、Spring Context、Servlet Context等(还有其他上下文吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-07 05:09:50

可能会有不同的解释,但以下是我的看法:

SecurityContext类的含义中,

  • Spring安全上下文保存身份验证、用户名、权限(角色)以及可能关于当前用户的其他信息。这种上下文的生命周期是当前请求,或者使用Spring在请求之间持久化安全上下文。在ApplicationContext类的含义中,是正在运行的sessions.
  • Spring应用程序的中心点。它的主要用途是包含应用程序单例bean,但它还有许多其他漂亮的功能(在另一个答案中提到了几个)。一个应用程序可以有多个ApplicationContexts,但最常见也是最简单的情况是,它只有一个。context.
  • Servlet应用程序通常使用WebApplicationContext“扩展”,它将其与Servlet Web Context集成在一起,ServletContext类的含义是Servlet webapp所具有的应用程序范围的上下文。在像Tomcat这样的servlet容器中,每个webapp实例都有一个。它不是Spring的一部分。在使用Spring时,您很少直接使用它。但它就在后台。

“上下文”是一个非常通用的术语,因此在您的环境中可能还有其他上下文。

票数 13
EN

Stack Overflow用户

发布于 2016-03-06 12:27:36

有许多“上下文”,它们的加载方式取决于您初始化应用程序的方式。但通常情况下,大多数应用程序只有一个上下文,其中包含应用程序所需的所有bean和组件。

例如,如果使用Servlet加载应用程序,则可以使用“根上下文”加载整个应用程序,该“根上下文”也将Servlet上下文作为其子上下文加载。

层次结构类似于下面的"root" context -> any other context。就这么简单。

描述的here in the Spring Docs ApplicationContext提供:

用于访问应用程序组件的

  • Bean工厂方法。(无需使用称为dependency injection)
  • The的new()以通用方式加载文件资源的功能,您就可以在应用程序中实现所需的功能。(具有propertiesprofiles)
  • The功能的外部配置,可将事件发布到已注册的侦听器。(有关“当某些事情发生时做某事”的奇谈,请阅读有关observer pattern)
  • The解析消息以支持国际化的功能。(包含应用程序中使用的所有字符串的文件,以便它们可以以不同的语言呈现,请阅读父上下文中的MessageSource)
  • Inheritance。(正如我前面所说的,您的应用程序需要“上下文”,而这就是它的起点。)

由于您使用的是Spring boot,因此默认情况下只有一个上下文:ApplicationContext。这将包含您需要的所有东西(Beans)和组件。

事实上,这就是使用Spring boot的好处,最小的配置和简化的配置。如果您觉得需要多个上下文,我强烈建议您使用Profiles

归根结底,“上下文”是由您的应用程序创建和定义的,可以将其视为定义您的应用程序的配置( XML或Java)。什么是“里面”,什么是“它需要”才能工作。

如果您想尝试更多地理解它,我强烈建议您从头开始阅读,并从Introduction to Spring开始。

票数 7
EN

Stack Overflow用户

发布于 2016-03-12 00:29:45

就系统设计而言,任何上下文都是公共功能和数据的集合,这些功能和数据在一个地方定义,但必须在程序中的任何地方使用。Context的主要目的是减少应用程序组件之间的依赖关系。Context的另一个目的是简化对常用功能和数据的访问。让我们考虑一下您在问题中列出的上下文。

ServletContext

ServletContextServlet technology的一部分。许多框架都基于这种技术(JSF、Spring、Struts等)。ServletContext包含与其Servlet容器(如Tomcat、Glassfish等)通信的功能。ServletContext提供的基本功能:

容器运行时获取有关请求dispatching;

  • add或删除Servlet、过滤器和Listeners;

  • get的应用程序初始parameters;

  • get信息,或设置容器的attributes;

  • log messages;

  • get
  • 附加信息,如应用程序路径、容器版本等。

正如您所看到的,如果您将使用Servlet技术(例如,基于它开发另一个mvc框架),那么在应用程序中的任何地方都可以使用这些基本功能。

ApplicationContext

ApplicationContextSpring framework应用程序的主要接口。它有很多实现。一个是从xml文件(ClassPathXmlApplicationContext)加载配置,另一个是基于注释(AnnotationConfigApplicationContext)加载配置,以此类推。ApplicationContext提供的基本功能:

基于来自不同来源(文件系统、jar文件、用于发布和侦听来自消息包的definitions;

  • load消息的url etc);

  • ability;

)的bean definitions;

  • load资源创建新

  • 的能力

同样,在启动时初始化,这个基本功能几乎可以在应用程序的任何地方使用。这就是它收集到上下文的原因。在后台使用了许多类来提供此功能,但您必须知道,要使用此功能,只需使用ApplicationContext

SecurityContext

SecurityContext提供对身份验证数据的访问。您可以获取认证用户的名称、角色等详细信息。该信息由安全模块初始化,可能在许多很多地方都需要。使用此信息的С组件对安全模块的类一无所知。他们只是从SecurityContext获取所有需要的信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35772389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档