春季不同语境的目的与关系

2022-09-02 04:04:20

我正在使用弹簧靴项目。我想了解不同语境的目的和关系吗?

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


答案 1

可以有不同的解释,但这是我的看法:

  • Spring Security上下文,在SecurityContext类的含义中,包含有关当前用户的身份验证,用户名,权限(角色)以及可能的其他信息。此类上下文的生存期是当前请求,或者安全上下文在使用会话的请求之间持久化。

  • Spring Context,在 ApplicationContext 类的含义中,是正在运行的 Spring 应用程序的中心点。它的主要目的是包含应用程序单例bean,但它具有许多其他漂亮的功能(在另一个答案中提到了几个)。一个应用程序可以有多个 ApplicationContext,但最常见和最简单的情况是,它只有一个。Web应用程序通常使用WebApplicationContext“扩展”,它将其与Servlet上下文集成。

  • Servlet ContextServletContext类的含义,是Servlet webapp具有的应用程序范围上下文。在像Tomcat这样的servlet容器中,每个webapp实例总是只有一个。它不是春天的一部分。使用Spring时,您很少直接使用它。但它在后台。

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


答案 2

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

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

层次结构类似于以下 ->。就是这么简单。"root" contextany other context

春季文档中描述的A提供了:ApplicationContext

  • 用于访问应用程序组件的 Bean 工厂方法。(花哨地谈论应用程序中需要的东西,而不使用所谓的依赖注入new())
  • 以通用方式加载文件资源的能力。(具有属性配置文件的外部配置)
  • 将事件发布到已注册侦听器的功能。(花哨的谈话为“当某些事情发生时做某事”,阅读关于观察者模式)
  • 解析消息以支持国际化的能力。(包含应用程序中使用的所有字符串的文件,以便可以用不同的语言呈现,请阅读 MessageSource)
  • 从父上下文继承。(就像我之前说的,你的应用程序需要“上下文”,这就是它开始的地方。

当您使用 Spring boot 时,默认情况下只有一个上下文:.这将包含您需要的所有东西(Bean)和组件。ApplicationContext

事实上,这就是使用Spring Boot,最小配置和简化配置的美丽之处。如果你觉得你需要多个上下文,我会敦促你使用配置文件来代替。

最终,“上下文”由您的应用程序创建和定义,将其视为定义应用程序的配置(无论是XML还是Java)。什么是“在其中”,什么“需要”才能工作。

如果你想尝试和理解它更多,我会敦促你从头开始阅读,并从春季介绍开始。


推荐