Spring 中AbstractRefreshableWebApplicationContext

  AbstractRefreshableWebApplicationContext 是 Spring Framework 中用于 Web 应用程序的一个抽象类,位于 org.springframework.web.context.support 包中。它继承自 AbstractRefreshableApplicationContext,主要用于支持 Web 应用程序的上下文管理。

主要功能

  1. 刷新上下文: 提供了刷新(refresh)Web 应用上下文的机制。这包括重新加载 bean 定义,重建 bean 实例,并重新初始化 beans。

  2. Web 环境支持: 作为抽象类,它为 Web 应用程序提供了特定于 Servlet 的上下文功能,如获取 ServletContext 和相关的 Web 资源。

  3. Lifecycle Management: 负责管理 Web 应用程序的生命周期,包括初始化和关闭。

  4. 资源解析: 支持从 Web 应用中的资源文件(如 XML 配置文件)加载 bean 定义。

关键方法

以下是 AbstractRefreshableWebApplicationContext 的一些重要方法:

  • getServletContext(): 返回关联的 ServletContext,可以用来访问 Servlet 环境中的资源。

  • refresh(): 刷新 Web 应用程序上下文,以重新加载所有的 bean 和相关配置。

  • getConfigLocations(): 获取上下文配置的位置,用于从特定位置加载配置文件。

  • onRefresh(): 框架在刷新时调用的方法,你可以在子类中重写此方法以执行特定的逻辑。

使用示例

  以下是一个简单的示例,展示如何使用 AbstractRefreshableWebApplicationContext 的一个具体实现。

1. 引入 Spring 依赖

  在 Maven 项目的 pom.xml 中添加 Spring 的依赖:

<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.20</version>
</dependency>
2. 创建 Bean 类
public class MyService {public void serve() {System.out.println("Service is running...");}
}
3. 创建 XML 配置文件

  在 src/main/webapp/WEB-INF 目录下创建一个 beans.xml 文件,内容如下:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="myService" class="MyService" />
</beans>
4. 创建 Web 应用上下文

通常,Web 应用的上下文会在 web.xml 中配置,下面是一个基于 Spring 的配置示例,使用 ContextLoaderListener

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/beans.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>myServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
5. 在 Servlet 中获取 Bean
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;@WebServlet("/myServlet")
public class MyServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取 WebApplicationContextWebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());MyService myService = (MyService) context.getBean("myService");myService.serve(); // 输出 "Service is running..."}
}

结果

当你访问你的 Servlet(例如,/myServlet)时,你将收到以下输出:

Service is running...

注意事项

  • Web 环境壳: AbstractRefreshableWebApplicationContext 的具体实现通常应由 Web 容器提供,如 Tomcat、Jetty 等,因此在实际应用中会涵盖容器的生命周期管理。

  • 部署: 确保 XML 配置文件正确部署到 WAR 文件的相应路径。

  • 现代替代: 尽管 Web 应用中常常使用 XML 配置,但现代 Spring 开发推荐使用基于注解的配置或者 Java 配置类,以便于更好的维护和灵活性。

结论

  • AbstractRefreshableWebApplicationContext: 是 Spring 的一个抽象类,专为 Web 应用提供支持,包括 bean 的管理和上下文的刷新。

  • 功能全面: 提供了丰富的功能,以支持 Web 环境的开发和管理。

  • 事件驱动和资源管理: 结合事件发布与资源访问功能,为开发复杂的 Web 应用程序提供助力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C语言]一、C语言基础(函数)

G:\Cpp\C语言精讲 6. 函数 6.1函数的基本使用 6.1.1 为什么需要函数 《街霸》游戏中&#xff0c;每次人物出拳、出脚或跳跃等动作都需要编写50-80行的代码&#xff0c;在每次出拳、出脚或跳跃的地方都需要重复地编写这50-80行代码&#xff0c;这样程序会变得很臃肿&#xff…

C++基础面试题 | C和C++的区别?

人生如逆旅&#xff0c;我亦是行人。 - 《临江仙送钱穆父》(苏轼) 2024.8.23 回答重点&#xff1a;C可以认为是C语言的超集&#xff0c;绝大部分C语言代码可以使用C运行 在设计思想上&#xff1a;面向过程 vs 面向对象 C是一种面向过程的编程语言&#xff0c;它侧重于函数和过程…

python学习8-数据获取与整理4

pandas迭代 在 Pandas 中&#xff0c;通常情况下你不需要迭代&#xff08;遍历&#xff09;DataFrame 或 Series&#xff0c;因为很多操作都是矢量化的&#xff0c;可以直接应用于整个数据集。然而&#xff0c;有时候你可能需要遍历数据帧&#xff08;DataFrame&#xff09;或…

通过Python绘制不同数据类型适合的可视化图表

在数据可视化中&#xff0c;对于描述数值变量与数值变量之间的关系常见的有散点图和热力图&#xff0c;以及描述数值变量与分类变量之间的关系常见的有条形图&#xff0c;饼图和折线图&#xff0c;可以通过使用Python的matplotlib和seaborn库来绘制图表进行可视化表达&#xff…

如何使用ssm实现ssm框架的购物网站+vue

TOC ssm113ssm框架的购物网站vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。…

如何评估Redis的性能

如果系统中出现了大 key、热 key 等&#xff0c;往往会导致 Redis 变慢&#xff0c;但是这个慢该如何界定&#xff1f;多久算慢&#xff1f;1秒还是3秒&#xff1f; 这个肯定是没有标准答案&#xff0c;因为这个和你的硬件设备有关。 硬件差一些&#xff0c;平时响应时间都是…

[C++] 初识 智能指针

标题&#xff1a;[C] 初识 智能指针 水墨不写bug 目录 一、前言 二、智能指针 1. 什么是RAII&#xff1f; 2.智能指针分类 三、智能指针简介 1.std::auto_ptr 2.std::unique_ptr 3.std::shared_ptr 正文开始&#xff1a; 一、前言 C智能指针的出现是有一定的背景的&am…

今天你City了吗?维乐Angel Revo带你穿梭都市自由随风~

当7月的热浪在都市中翻滚&#xff0c;你是否渴望逃离钢筋水泥的束缚&#xff0c;寻找一片属于自己的绿意盎然&#xff1f;今天你City了吗&#xff1f;快带上VELO Angel Revo一起抓住夏日的尾巴&#xff0c;用一场骑行与这座城市的风景共舞&#xff01;      轻巧出行&#…

Centos安装Jenkins教程详解版(JDK8+Jenkins2.346.1)

本教程基于 JDK8 和 Jenkins2.346.1 JDK安装 下载OpenJDK8文件 wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u422b05.tar.gz解压到指定目录 # 创建目录 mkdir -p /usr/local/software# 解压文件到指定目录&#…

linux-基础知识1

简单命令 init 0 关机 int 6 重启 pwd 查看当前所在目录&#xff0c; cd切换目录 ls 列出目录下的内容 clear 清屏 date 查看时间 路径 linux表示硬件设备的文件在dev目录 /tmp是临时目录&#xff0c;可以创建目录和文件&#xff0c;但不能保证安全 df查看文件系统…

oracle共享池(shared pool):一、工作原理、组成部分 二、软硬解析过程

文章目录 oracle整体结构图共享池&#xff08;shared pool&#xff09;shared pool的作用shared pool的组成查询 shared pool 各组成部分大小硬解析和软解析 oracle整体结构图 共享池&#xff08;shared pool&#xff09; shared pool的作用 1、 将 sql 语句解析成执行计划 …

【Node】【2】创建node应用

创建node应用 node应用&#xff0c;不仅可以实现web应用&#xff0c;也能实现http服务器。 如果是php写后端&#xff0c;还需要有http服务器&#xff0c;比如apache 或者 nginx。 但是现在主流都是java写后端&#xff0c;也可以像 Node.js 一样用于实现 Web 应用和 HTTP 服务…

easypoi模板导出word多页导出加强版

说明 上一篇文章提到多页导出&#xff0c;但是后边发现一个问题&#xff0c;如果用同一个模板导出多页内容&#xff0c;我们去获取多页内容的时候&#xff0c;会发现全部都一样&#xff0c;举个例子&#xff1a; XWPFDocument document WordExportUtil.exportWord07(outputU…

有限差分学习笔记

有限差分介绍 ​ 在数学中&#xff0c;有限差分法&#xff08;finite-difference methods&#xff0c;简称FDM&#xff09;&#xff0c;是一种微分方程数值方法&#xff0c;是通过有限差分来近似导数&#xff0c;从而寻求微分方程的近似解。 由泰勒展开式的推导 显式方…

C# 项目管理CLI常用命令

Command Line Interface (CLI) .NET Command Line Interface (CLI) 是一个跨平台的工具链&#xff0c;用于开发、构建、运行和发布基于 .NET Core 和 .NET 5 应用程序。以下是一些常用的 .NET CLI 命令及其简要说明&#xff1a; 创建新项目 dotnet new <template> [-n|…

选择搜索引擎进行搜索

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>选择搜索引擎进行搜索</title><script>function searchSelectedEngine() {var keyword document.getElementById(keyword).value;var engine document.getEl…

【PyTorch】关于Tensorboard的简单使用

前提文章目录 【PyTorch】深度学习PyTorch环境配置及安装【详细清晰】 【PyTorch】深度学习PyTorch加载数据 文章目录 前提文章目录SummaryWriter使用add_image()的使用&#xff08;常用来观察训练结果&#xff09;利用Tensorboard观察图片 SummaryWriter使用 from torch.util…

手把手教你用vite+React18+TS+redux+prettier+eslint+Ant打造企业级前端项目

通过这篇文章你可以学到 如何使用使用 webpack 搭建项目如何在 webpack中集成 typescript如何在 webpack 中集成 React Router 和 Redux如何使用 React 的组件库 Ant Design如何在项目中集成 eslint 和 prettier 保证代码质量如何为团队开发专属的项目模板 环境依赖版本 nod…

Hive SQL语言

目录 Hive SQL之数据库与建库 create database :创建数据库 use database :选择特定的数据库 drop database :删除数据库 Hive SQL之表与建表 create table : 创建表 分隔符指定语法 Hive SQL-DML-Load加载数据 Load语法功能 语法规则之filepath 语法规则之LOCAL …

spring揭秘09-aop03-aop织入器织入横切逻辑与自动织入

文章目录 【README】【1】spring aop的织入【1.1】使用ProxyFactory 作为织入器【1.2】基于接口的代理&#xff08;JDK动态代理&#xff0c;目标类实现接口&#xff09;【补充】 【1.2】基于类的代理&#xff08;CGLIB动态代理&#xff0c;目标类没有实现接口&#xff09;【1.2…