Spring中不同语境的目的和关系

Har*_*ana 18 java spring spring-security

我正在使用春季启动项目.我想了解不同背景的目的和关系?

例如,Spring Security上下文,Spring Context,Servlet Context等(还有更多的上下文吗?)

hol*_*s83 10

可以有不同的解释,但这是我如何看待它:

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

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

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

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


dka*_*ejs 6

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

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

层次结构如下"root" context- > any other context.就这么简单.

Spring Docs中 描述的内容ApplicationContext提供:

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

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

事实上,这是使用Spring启动,最小配置和简化配置的美妙之处.如果您觉得需要多个上下文,我会建议您使用个人资料.

最终,"Context"由您的应用程序创建和定义,将其视为定义应用程序的配置(无论是XML还是Java).什么是"在其中"以及"它需要"工作的内容.

如果你想尝试更多地理解它,我会敦促你从头开始阅读,然后从Spring入门开始.