ApplicationContext 是Spring的核心

ApplicationContext 是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,ApplicationContext则是“应 用的容器”了:P,Spring把Bean放在这个容器中,在需要的时候,用getBean方法取出,虽然我没有看过这一部分的源代码,但我想它应该是一 个类似Map的结构。 
在Web应用中,我们会用到WebApplicationContext,WebApplicationContext继 承自ApplicationContext,先让我们看看在Web应用中,怎么初始化WebApplicationContext,在web.xml中定 义: 
xml 代码
 
  1. <context-param>   
  2. <param-name>contextConfigLocation</param-name>   
  3. <param-value>/WEB-INF/applicationContext.xml</param-value>   
  4. </context-param>   
  5.   
  6. <listener>   
  7. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   
  8. </listener>   


xml 代码
 
  1. <servlet>   
  2. <servlet-name>context</servlet-name>   
  3. <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>   
  4. <load-on-startup>1</load-on-startup>   
  5. </servlet>   


可 以看出,有两种方法,一个是用ContextLoaderListener这个Listerner,另一个是ContextLoaderServlet这 个Servlet,这两个方法都是在web应用启动的时候来初始化WebApplicationContext,我个人认为Listerner要比 Servlet更好一些,因为Listerner监听应用的启动和结束,而Servlet得启动要稍微延迟一些,如果在这时要做一些业务的操作,启动的前 后顺序是有影响的。 

那么在ContextLoaderListener和ContextLoaderServlet中到底做了什么呢? 
以ContextLoaderListener为例,我们可以看到 
public void contextInitialized(ServletContextEvent event) { 
this.contextLoader = createContextLoader(); 
this.contextLoader.initWebApplicationContext(event.getServletContext()); 
} 
protected ContextLoader createContextLoader() { 
return new ContextLoader(); 
} 
ContextLoader 是一个工具类,用来初始化WebApplicationContext,其主要方法就是initWebApplicationContext,我们继续追 踪initWebApplicationContext这个方法(具体代码我不贴出,大家可以看Spring中的源码),我们发现,原来 ContextLoader是把WebApplicationContext(XmlWebApplicationContext是默认实现类)放在了 ServletContext中,ServletContext也是一个“容器”,也是一个类似Map的结构,而 WebApplicationContext在ServletContext中的KEY就是 WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,我们如果要使用 WebApplicationContext则需要从ServletContext取出,Spring提供了一个 WebApplicationContextUtils类,可以方便的取出WebApplicationContext,只要把 ServletContext传入就可以了。 

上面我们介绍了WebApplicationContext在Servlet容器中初始化 的原理,一般的Web应用就可以轻松的使用了,但是,随着Struts的广泛应用,把Struts和Spring整个起来,是一个需要面对的问题, Spring本身也提供了Struts的相关类,主要使用的有 org.springframework.web.struts.ActionSupport,我们只要把自己的Action继承自 ActionSupport,就是可以调用ActionSupport中getWebApplicationContext()的方法取出 WebApplicationContext,但这样一来在Action中,需要取得业务逻辑的地方都要getBean,看上去不够简洁,所以 Spring又提供了另一个方法,用org.springframework.web.struts.ContextLoaderPlugIn,这是一个 Struts的Plug,在Struts启动时加载,对于Action,可以像管理Bean一样来管理,在struts-config.xml中 Action的配置变成类似下面的样子 
xml 代码
 
  1. <action attribute="aForm" name="aForm" path="/aAction" scope="request" type="org.springframework.web.struts.DelegatingActionProxy">   
  2. <forward name="forward" path="forward.jsp" />   
  3. </action>   

注 意type变成了org.springframework.web.struts.DelegatingActionProxy,之后我们需要建立 action-servlet.xml这样的文件,action-servlet.xml符合Spring的spring-beans.dtd标准,在里 面定义类似下面的 
xml 代码
 
  1. <bean name="/aAction" class="com.web.action.Aaction" singleton="false">   
  2. <property name="businessService">   
  3. <ref bean="businessService"/>   
  4. </property>   
  5. </bean>   


com.web.action.Aaction 是Action的实现类,businessService是需要的业务逻辑,Spring会把businessService注入到Action中,在 Action中只要写businessService的get和set方法就可以了,还有一点,action的bean是singleton= "false",即每次新建一个实例,这也解决了Struts中Action的线程同步问题,具体过程是当用户做“/aAction”的HTTP请求(当 然应该是“/aAction.do”),Struts会找到这个Action的对应类 org.springframework.web.struts.DelegatingActionProxy, DelegatingActionProxy是个代理类,它会去找action-servlet.xml文件中“/aAction”对应的真正实现类,然 后把它实例化,同时把需要的业务对象注入,然后执行Action的execute方法。 

使用了ContextLoaderPlugIn,在struts-config.xml中变成类似这样配置 
xml 代码
 
  1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">   
  2. <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml" />   
  3. </plug-in>   

而在web.xml中不再需要ContextLoaderListener或是ContextLoaderServlet。 

说 到这里不知道大家会不会有这样的问题,如果使用ContextLoaderPlugIn,如果我们有些程序是脱离Struts的Action环境,我们怎 么处理,比如我们要自定义标记库,在标记库中,我们需要调用Spring管理的业务层逻辑对象,这时候我们就很麻烦,因为只有在action中动态注入业 务逻辑,其他我们似乎不能取得Spring的WebApplicationContext。 

别急,我们还是来看一下 ContextLoaderPlugIn的源码(源码不再贴出),我们可以发现,原来ContextLoaderPlugIn仍然是把 WebApplicationContext放在ServletContext中,只是这个KEY不太一样了,这个KEY值为 ContextLoaderPlugIn.SERVLET_CONTEXT_PREFIX+ModuleConfig.getPrefix()(具体请查 看源代码),这下好了,我们知道了WebApplicationContext放在哪里,只要我们在Web应用中能够取到ServletContext也 就能取到WebApplicationContext了:) 

Spring是一个很强大的框架,希望大家在使用过程中不断的深入,了解其更多的特性,我在这里抛砖引玉,有什么不对的地方,请大家指出
PINN驱动的3D不可压缩流场重建——从稀疏2D2C观测到完整物理场反演——含源码实现 多尺度融合策略在此发挥作用:高分辨率的2D2C数据用于约束平面内的精细结构,而低分辨率的3D3C数据提供第三维度的粗尺度信息。迁移学习架构在此发挥关键作用。这种策略在湍流封闭模型构建中尤为有效,其中RANS提供的平均流场与DNS的雷诺应力数据融合,显著提升了分离流的预测精度。在稀疏数据场景下,注意力权重根据观测数据的分布动态调整,强化数据缺失区域的物理约束,同时避免过拟合于观测点。这种机制与自适应采样的结合,实现了计算效率与重建精度的平衡,在仅保留约百分之十关键节点的情况下,仍能保持高物理一致性。 阅读详情

相关推荐

分享一个简单的迭代学习机器人双臂控制(MATLAB)

1 什么是迭代学习控制 迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大。1984年,Arimoto等人用英文介绍了该方法。它是指不断重复一个同样轨迹的控制尝试,并以此修正控制律,以得到非常好的控制效果的控制方法。 迭代学习控制的特点是“在重复中学习”,通过反复的迭代修正,达到改善控制效果的目的。迭代学习控制的原理是根据系统前次运行所获得的输出误差信息,在控制过程中不断修正控制输入,随着迭代的进行,逐

weixin_45776027的博客 4483

ApplicationContext介绍 ApplicationContext是什么?

如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的身躯了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。 ApplicationContext类体系结构 ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件

Move on 1万+

菜鸟的成长之路——应用上下文(ApplicationContext)

如果说BeanFactory是spring的心脏,那么ApplicationContext就是spring的身躯了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的的功能。还记得上节课我们提到XmlBeanFactory过期的api吗?他的代替方法就是ApplicationContext。

菜小白的博客 4647

Snort源代码编译 _ 采坑之旅(for Windows VS2015)

    系统环境:Windows7 sp1 x64     编译环境:VS2015 SP1     Snort版本:2.9.12     daq版本:2.0.6     Snort官网:https://www.snort.org/downloads#snort-downloads 背景     最近需要实现一个类似网络防火墙的产品,主要参考Snort源码,先花了点时间简单读了下网上比较流行的《...

magictong的专栏 8888

从寄存器到驱动:深入解读RFSoC RF-ADC阈值与校准API的底层逻辑

本文深入解析Xilinx RFSoC中RF-ADC的阈值检测与校准API的底层逻辑,涵盖寄存器映射、驱动实现及Gen3增强功能。通过详细代码示例和寄存器操作流程,揭示如何精准控制信号阈值检测与校准时序,提升系统稳定性与性能。特别探讨RF数据转换器在无线通信和雷达信号处理中的关键应用。

weixin_30552811的博客 687

ApplicationContext介绍

ApplicationContext是Spring中的核心接口和容器,允许容器通过应用程序上下文环境创建、获取、管理bean。在构建容器的时候,创建对象采用的策略是立即加载的方式,即只要一读取完配置文件就立即创建配置文件中配置的对象。BeanFactory采用的是延迟加载的方式,什么时候根据id获取对象了,什么时候才真正地创建对象。 该接口具有三个常用的实现类: 1、ClassPathXmlApplicationContext:可以加载类路径下的配置文件,要求配置文件必须在类路径之下。 2、FileSyst

畅春园 1万+

掌握 Unity 中的状态机:综合指南

最后,将拥有一个由状态机驱动的功能齐全的播放器控制器,可以集成到自己的项目中。此外,状态机有助于实现复杂的人工智能、玩家控制、动画系统等,从而形成更强大、更灵活的游戏架构。状态机是计算机科学和游戏开发中的一个基本概念,它通过定义一组有限的状态及其之间的转换来模拟实体的行为。你可以定义常见的状态行为,例如 Enter、Update 和 Exit 方法,确保整个状态机架构的一致性和连贯性。由于前面提到的状态类扩展了 BaseState 类,因此我们可以为具有不同状态的不同对象创建单独的类。

yolo模型训练找我,AI游戏合作找我 1453

ApplicationContext 详细介绍

的所有功能,还添加了国际化支持、资源访问、事件传播、以及更高级的容器特性,如自动装配和生命周期管理等。它是Spring应用中的核心容器,负责管理和配置应用中的对象(称为beans)。,开发者可以轻松地管理应用中的对象(Bean),并利用Spring提供的各种特性,如依赖注入、国际化支持、事件传播等,来构建松耦合、可扩展的应用。的配置可以通过多种方式实现,包括基于XML的配置文件、基于注解的配置(如。是Spring框架中的一个核心接口,它扩展了。接口,并提供了更全面的功能。接口,并提供了更全面的功能。

ls188665的博客 898

在Simulink中进行基于强化学习控制策略的三相逆变器仿真

本文详细介绍了在Simulink中实现基于强化学习控制策略的三相逆变器仿真的完整流程。主要内容包括:1)准备工作,确保MATLAB/Simulink及相关工具箱安装;2)构建三相逆变器基础模型,包含电源、全桥电路、LC滤波器和负载;3)重点阐述强化学习控制器设计,涉及状态空间、动作空间定义,奖励函数设计和算法选择;4)实现控制逻辑,包括环境创建、代理配置和训练过程;5)仿真设置与结果分析。文章强调了模型调试优化的重要性,并建议结合文献研究提升控制效果。该方案为开发自适应电力电子控制系统提供了实用指南。

amy_mhd的博客 271

Oracle EBS 寄销/VMI(2)-->采购篇

上篇有一部分设置需要建BPA后,将BPA编号与批准的供应商相关联.     本篇主要是讲的内容:一揽子采购协议-->准标采购订单-->收接入库-->子库转移-->创建冲减通知-->'按接收开票' 自动开票程序 1. PO-->采购订单à采购订单 创建一揽子采购协议,确定物料

陈显平的专栏-Oracle EBS 1万+

(十二)ApplicationContext详解(中)

Spring官网阅读(十二)ApplicationContext详解(中) 在上篇文章中我们已经对ApplicationContext的一部分内容做了介绍,ApplicationContext主要具有以下几个核心功能: 国际化 借助Environment接口,完成了对Spring运行环境的抽象,可以返回环境中的属性,并能出现出现的占位符 借助于Resource系列接口,完成对底层资源的访问及加载 继承了ApplicationEventPublisher接口,能够进行事件发布监听 负责创建、配置及管理Be

开心就好 8930

linux v3h平台开发系列详解(GMSL摄像头篇):1.11 解串器MIPI 1.5G高速率特殊deskew配置

解串器max96712 deskew配置

xian18809311584的博客 1775

Spring的核心类: BeanFactory, ApplicationContext 笔记241103

ApplicationContext是BeanFactory的子接口,提供了更多面向应用的功能,如国际化支持、资源访问、事件传播等。

kfepiza的博客 1099

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java Spring 的 ApplicationContext - 核心接口

提供了多个扩展点,允许你自定义 Spring 容器的行为。例如,你可以实现接口来修改 Bean 的定义,或者实现接口来监听并处理 Spring 容器发布的事件。是 Spring 框架中一个核心且功能丰富的接口,它提供了对 IoC 容器的全面管理和配置能力。通过,你可以方便地实例化、配置和组装应用中的 Bean,同时利用它提供的国际化支持、事件发布、资源加载等功能来增强应用的功能和可维护性。掌握的使用对于深入理解 Spring 框架和构建高效、可扩展的 Java 应用至关重要。

编程小弟的博客 1461

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IOC 容器的进化:ApplicationContext 在 Spring 中的核心地位

如果说 BeanFactory 是“造 Bean 的机器”,那 ApplicationContext 就是“让整个应用活起来的生态系统”。生命周期管理者事件调度中心国际化桥梁AOP 与事务的激活器Spring Boot 自动配置的基石“ApplicationContext 是 Spring 的心脏,它让 IoC 从‘能用’变成‘能活’。

2501_92441786的博客 870

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring核心容器两个接口ApplicationContext和BeanFactory

import dao.LoginDao; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.ApplicationContext;...

QWE395655913的博客 184

Spring(二)核心容器 - 简介 、BeanFactory、ApplicationContext

文章目录前言1、容器简介2、容器的结构2.1 BeanFactory2.2 ApplicationContext2.2.1 ConfigurableApplicationContext2.2.2 WebApplicationContext2.3 差异对比3、ApplicationContext 准备启动4、总结 前言 在上篇文章中,和大家一起讨论了 Spring 的整体架构,其大致分为五个模块:核...

qq_36277052的博客 444

Spring框架核心容器:BeanFactory 和ApplicationContext

与 ClassPathXmlApplicationContext有所不同的是,在读取 Spring的配置文件时,FileSystemXmlApplicationContext不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,例如“D:/workspaces/applicationContext.xml”。Spring框架的主要功能是通过其核心容器来实现的,因此在正式学习Spring框架的使用之前,有必要先对其核心容器有一定的了解。么方法调用的时候,会默认用绝对路径来找。

Blue92120的博客 609

Spring | Spring的基本应用 (核心容器、四个基本的模块、applicationContext.xml)

Spring是由组织和开发的一个分层的Java SE/EE full-stack (一站式 )轻量级开源框架。Spring以IOC控制反转)和AOP面向切面编程)为内核。Spring使用基本JavaBean来完成以前只可能由EJBJava企业Bean)完成的工作,取代了EJB的臃肿、低效的开发模式。Spring致力于Java EE应用各层的解决方案。在表现层它提供了Spring MVC等功能;在业务逻辑层可以管理事务记录日志等;在持久层可以整合MyBatis等技术。虽然Spring贯穿于.....

m0_70720417的博客 2834

【Spring】〖代码〗Spring的核心配置文件applicationContext.xml

〖代码〗Spring框架的核心配置文件applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schem

Need not to know 237

Spring核心 ApplicationContext的加载过程

我们在使用Spring的时候,一般来说都会通过这个方式来实例化一个applicationContext ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); 接下来我们就一步步的来看看...

Gabriel丶的博客 819

Spring核心之FactoryBean,BeanFactory,ApplicationContext的区别

以Factory结尾,表示它是一个工厂类(接口), 它负责生产和管理bean的一个工厂定义了IOC容器的最基本形式,并提供了IOC容器应遵守的的最基本的接口,也就是Spring IOC所遵守的最底层和最基本的编程规范。在Spring中,是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖在Spring代码中,只是个接口,并不是IOC这些实现类从不同的维度对进行了扩展。IOC容器,并且提供方法支持外部程序对这些bean。

上善若泪 1328

Spring——获取spring的核心容器,并根据id获取对象及ApplicationContext的三个常用实现类

package com.ithema.ui; import com.ithema.dao.IAccountDao; import com.ithema.service.IAccountService; import com.ithema.service.impl.AccountServiceImpl; import org.springframework.context.ApplicationC...

weixin_42035395的博客 741

Spring应用开发必知:ApplicationContext的四大核心能力

Spring Framework 的 ApplicationContext 是 BeanFactory 的增强版,提供了四大核心企业级功能:1)国际化支持(MessageSource),实现多语言动态加载;2)事件驱动机制,通过发布-订阅模式实现组件解耦;3)统一资源访问(ResourceLoader),屏蔽文件/类路径/URL的差异;4)Web集成,支持自动初始化和Java EE部署。这些功能使 ApplicationContext 成为实际开发中的首选容器,尤其适合企业级应用场景。

m0_37607945的博客 854
上一篇: 近一段时间没有来这里了
darchen2011
博客等级 码龄14年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值