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

时间:2016-03-03 12:36:40

标签: java spring spring-security

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

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

3 个答案:

答案 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提供:

  • 用于访问应用程序组件的Bean工厂方法。 (在不使用名为dependency injectionnew()
  • 的情况下,在您的应用程序中寻找您需要的内容
  • 以通用方式加载文件资源的能力。 (使用propertiesprofiles进行外部配置)
  • 将事件发布到已注册的侦听器的功能。 (花哨谈论"当某些事情发生时做某事",阅读关于observer pattern
  • 解析消息以支持国际化的能力。 (包含应用程序中使用的所有字符串的文件,以便可以使用不同的语言呈现,请阅读MessageSource
  • 从父上下文继承。 (就像我之前说的那样,你的应用程序需要" context"这就是它开始的地方。)

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

事实上,使用Spring启动,最小配置和简化配置的美妙之处。如果您认为需要多个上下文,我会建议您使用Profiles代替。

最终"语境"由应用程序创建和定义,将其视为定义应用程序的配置(无论是XML还是Java)。什么"在其中"什么"它需要"上班。

如果你想尝试更多地理解它,我会敦促你从头开始阅读并从Introduction to Spring开始。

答案 2 :(得分:3)

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

<强> ServletContext的

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

  • 获取应用程序初始参数;
  • 获取有关请求调度的信息;
  • 添加或删除Servlet,过滤器和监听器;
  • 获取或设置容器的属性;
  • 记录运行时消息;
  • 获取应用程序路径,容器版本等其他信息。

如您所见,只有基本功能,如果您将使用Servlet技术(例如,基于它开发另一个mvc框架),那么它在应用程序的任何地方都很有用。

<强>的ApplicationContext

ApplicationContextSpring framework应用程序的主要界面。它有很多实现。其中一个从xml-file( ClassPathXmlApplicationContext )加载配置,另一个基于注释( AnnotationConfigApplicationContext )加载配置,依此类推。 ApplicationContext提供的基本内容:

  • bean factory,基于bean定义创建新bean的能力;
  • 从不同来源(文件系统,jar文件,网址等)加载资源;
  • 发布和收听活动的能力;
  • 解决来自邮件包的邮件;

同样,在开始时初始化,这个基本功能几乎可以在您的应用程序的任何位置使用。这就是为什么它收集到上下文。在后台使用的许多类,为了使用此功能而提供此功能,但您必须知道所有这些功能 - 只需ApplicationContext

<强> SecurityContext的

SecurityContext提供对身份验证数据的访问。您可以获取经过身份验证的用户,角色和其他详细信息的名称。许多地方可能需要安全模块初始化的这些信息。使用此信息的组件对安全模块的类别一无所知。他们只是从SecurityContext获得所有必需的信息。