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

15 浏览
0 Comments

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

我正在使用一个Spring Boot项目。我想要理解不同上下文的目的和关系?\n比如说,Spring Security上下文、Spring上下文、Servlet上下文等(还有其他上下文吗?)

0
0 Comments

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

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

- 获取应用程序的初始参数;

- 获取有关请求分派的信息;

- 添加或删除Servlets、Filters和Listeners;

- 获取或设置容器的属性;

- 记录运行时消息;

- 获取其他信息,如应用程序路径、容器版本等。

正如您所看到的,这里只有基本功能,如果您使用Servlet技术(例如开发基于它的另一个MVC框架),它可以在应用程序的任何地方派上用场。

ApplicationContext是Spring框架应用程序的主要接口,它有很多实现。其中一种从xml文件加载配置(ClassPathXmlApplicationContext),另一种基于注解加载配置(AnnotationConfigApplicationContext),等等。ApplicationContext提供的基本功能包括:

- Bean工厂,能够根据Bean定义创建新的Bean;

- 从不同的来源加载资源(文件系统、jar文件、url等);

- 发布和监听事件;

- 从消息包中解析消息。

同样,在启动时初始化的这些基本功能几乎可以在应用程序的任何地方派上用场。这就是为什么它们被收集到上下文中。在后台使用了许多类来提供这些功能,但您只需要知道使用这些功能的方式就可以了,那就是ApplicationContext。

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

0
0 Comments

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

通常情况下,如果使用Servlet加载应用程序,可以使用一个“根上下文”加载整个应用程序,该根上下文还加载Servlet上下文作为其子上下文。层次结构如下所示:“根”上下文 ->“任何其他上下文”。

ApplicationContext在Spring文档中描述如下,它提供了以下功能:

- 用于访问应用程序组件的Bean工厂方法(使用依赖注入来获取应用程序中所需的内容,而不使用new())

- 以通用方式加载文件资源(使用属性和配置文件实现外部配置)

- 向已注册的监听器发布事件(当某些事情发生时执行某些操作,类似于观察者模式)

- 解析消息以支持国际化(在应用程序中使用的所有字符串的文件,以便以不同语言呈现)

- 从父上下文继承(应用程序的上下文起始位置)

在使用Spring Boot时,默认情况下只有一个上下文:ApplicationContext。这个上下文包含了您需要的所有内容(Bean)和组件。这正是使用Spring Boot的优点,配置简单、简化配置。如果您觉得需要多个上下文,我建议您使用Profiles。

最终,“上下文”由您的应用程序创建和定义,可以将其视为定义应用程序所需配置(无论是XML还是Java)的地方。如果您想更深入地了解它,我建议您从开始阅读,并从Spring的介绍开始。

在一个基于Web的Spring应用程序中,也是在Servlet之上运行的,是这样的吗?所以如果我说“根”上下文 ->“servlet”上下文 ->“spring”上下文,这样是正确的吗?

根上下文是“基本上下文”,因此Servlet上下文继承自根上下文,作为其子上下文。可以这样理解...您使用根上下文创建应用程序所需的所有内容(服务等),但是Servlet上下文只实例化需要作为Servlet的“东西”。请记住,容器中可以有多个Servlet,并且它们可以共享“根应用程序上下文”,这是理解这一切如何配合的关键。

好的,谢谢。当涉及到Servlet和Spring上下文时,如果我说Servlet上下文是Spring上下文的父上下文,还是它们是兄弟关系?此外,Spring可以访问Servlet上下文,但反之不行,对吗?

在Web应用程序中,您可以拥有一个(或多个)上下文,但只能有一个“dispatcher servlet上下文”。这使得Servlet上下文成为父应用程序上下文的子上下文。此外,可以查看以下Stack Answers的链接,了解更多信息。

0
0 Comments

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

在Spring框架中,有多种不同的上下文,每个上下文都有其特定的目的和关系。下面将分别介绍这些上下文的目的和关系。

Spring安全上下文(Spring Security context):指的是SecurityContext类,用于保存当前用户的认证信息、用户名、权限(角色)以及其他可能的用户信息。该上下文的生命周期为当前请求,或者使用会话将安全上下文持久化在多个请求之间。

Spring上下文(Spring Context):指的是ApplicationContext类,是运行Spring应用程序的核心。它的主要目的是保存应用程序的单例Bean,同时也有许多其他有用的功能。一个应用程序可以有多个ApplicationContext,但通常情况下只有一个,这是最常见且最简单的情况。Web应用程序通常使用WebApplicationContext扩展,将其与Servlet上下文集成。

Servlet上下文(Servlet Context):指的是ServletContext类,是Servlet Web应用程序的应用程序级上下文。在像Tomcat这样的Servlet容器中,每个Web应用程序实例都有且只有一个ServletContext。它不是Spring的一部分,在使用Spring时很少直接使用它,但它在后台起着重要作用。

需要注意的是,“上下文”是一个相当通用的术语,在您的环境中可能还有其他上下文存在。

Spring框架中的不同上下文在功能和目的上有所区别。Spring Security上下文用于保存用户的认证信息和权限,Spring上下文是整个Spring应用程序的核心,用于管理Bean,而Servlet上下文则是Servlet Web应用程序的应用程序级上下文。了解这些上下文的目的和关系有助于我们在开发中更好地理解和使用Spring框架。

0