Spring中ApplicationContext加载机制

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp33

加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet。
   这两者在功能上完全等同,只是一个是基于Servlet2.3版本中新引入的Listener接口实现,而另一个基于Servlet接口实现。开发中可根据目标Web容器的实际情况进行选择。

配置非常简单,在web.xml中增加:
<listener>
       <listener-class>
          org.springframework.web.context.ContextLoaderListener
       </listener-class>
</listener>
或:
<servlet>
         <servlet-name>context</servlet-name>
         <servlet-class>
           org.springframework.web.context.ContextLoaderServlet
         </servlet-class>
         <load-on-startup>1</load-on-startup>
</servlet>
通过以上配置,Web容器会自动加载/WEB-INF/applicationContext.xml初始化
ApplicationContext实例,如果需要指定配置文件位置,可通过context-param加以指定:
<context-param><param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext-bean.xml,classpath:spring-jamon.xml</param-value> </context-param>
配置完成之后,即可通过
WebApplicationContextUtils.getWebApplicationContext方法在Web应用中获取ApplicationContext引用。
如:ApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext();
         LoginAction action=(LoginAction)ctx.getBean("action");
-------------------------------------------------------------------------------------------
spring为ApplicationContext提供有多种实现(举例)
spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext和XmlWebApplicationContext,其中XmlWebApplicationContext是专为Web工程定制的。使用举例如下:
   1. FileSystemXmlApplicationContext
      eg1.ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml"); //加载单个配置文件
      eg2.String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
          ApplicationContext ctx = new FileSystemXmlApplicationContext(locations ); //加载多
个配置文件
eg3.ApplicationContext ctx =new FileSystemXmlApplicationContext("D:/project/bean.xml");//根据具体路径加载文件
注:
(1)这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
(2)获取失败时抛出异常。
  2. ClassPathXmlApplicationContext
      eg1.ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
      eg2.String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
           ApplicationContext ctx = new ClassPathXmlApplication(locations);
注:
(1).其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext与BeanFactory的xml文件定位方式一      样是基于路径的。

3. XmlWebApplicationContext
    eg1.ServletContext servletContext = request.getSession().getServletContext();   
            ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
注 :
(1)一般是 ApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
(2)获取失败时返回null。
(3)这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。
4.继承自抽象类ApplicationObjectSupport
说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
5.继承自抽象类WebApplicationObjectSupport
说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
6.实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
Spring初始化时,会通过该方法将ApplicationContext对象注入。
实现方法:
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        applicationContext = arg0;   
    }
获取bean:
ITaskService bean = (ITaskService)applicationContext.getBean(taskServiceName);

参考:
1 http://hi.baidu.com/fyears/blog/item/e2f689afd05216ce7dd92a37.html
2. http://www.blogjava.net/Todd/archive/2010/04/22/295112.html

转载于:https://www.cnblogs.com/grefr/p/5046337.html

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

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

相关文章

Codeforces 724 C. Ray Tracing

Codeforces 724 C. Ray Tracing 题目来源 codeforces 题意&#xff1a; 有一些传感器按输入坐标分布在图上&#xff0c;有一道光从(0,0)沿45角出射&#xff0c;遇到边按反射法则反射&#xff0c;遇到角落结束。 问每一个点被经过的时间&#xff0c;并按照输入顺序输出。题解&am…

CDN架构以及原理分析

详见&#xff1a; http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61 在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度、优化现有Internet中信息的流动,需要在用户和服务器间加入中间层CDN. 使用户能以最快的速度&#xff0c;从最接近用…

基于VS2019的Eigen库安装详解

概念 Eigen是一个C开源线性代数库&#xff0c;以提供有关矩阵的的线性代数运算&#xff0c;解方程等功能。Eigen在很多领域如信号处理&#xff0c;图像处理&#xff0c;深度学习等起到重要作用&#xff0c;学习其操作方法&#xff0c;可以灵活的对线性代数、矩阵和矢量将进行计…

【图像处理】——Python图像分割边缘检测算法之二阶梯度算子(laplace、log、dog算子)

目录 一、二阶算子简介 二、laplace(拉普拉斯算子) 1、什么是拉普拉斯算子

C#中不常见的运算符功能汇总

介绍 C#有很多运算符&#xff0c;可分为以下几种&#xff1a;算数运算符&#xff0c;比较运算符&#xff0c;条件运算符&#xff0c;赋值运算符&#xff0c;逻辑运算符。下面对不常见的运算符进行汇总。 概念 条件运算符 ?(可空类型修饰符) 引用类型可以使用空引用表示一…

SQL Server2012中如何通过bak文件还原SQL Server2012数据库

1 登陆完数据库后&#xff0c;不要新建数据库&#xff0c;直接点击“数据库”然后右击"还原数据库"。 2 在"源"选项中选择"设备"。 3 选择相应的bak文件并进行添加。 4 添加完之后点击确定&#xff0c;注意在目标这一栏中数据库名称都可以不用写…

【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)

转载博客请注明详细地址,谢谢本文讲了形态学基本操作膨胀腐蚀开闭操作的原理本文讲解了用OpenCV-Python实现形态学操作目录 一、形态学简述 1、简介 2、一些基本定义 3、结构元素

thrift服务windows环境编译失败

为什么80%的码农都做不了架构师&#xff1f;>>> 修改maven的pom文件 <!--thrift服务 api 层&#xff0c;开发时 windows系统需指定exe程序位置--> <properties> <thrift.exe.path>E:/Thrift/thrift-0.9.3.exe</thrift.exe.path&g…

编译包含Google Play服务App的SDK版本问题

编译包含Google Play服务App的SDK版本问题 错误信息&#xff1a;No Resouce identifier found for attribute ‘touchscreen BlocksFocus’ in package ‘android’这个错误通常是App引用了Google Play时候发生。Xamarin编译该类App&#xff0c;需要目标SDK版本必须是21或者更高…

《第一行代码》学习笔记35-服务Service(2)

1.Android的UI线程不安全&#xff0c;想要更新应用程序里的UI元素&#xff0c;则须在主线程中进行&#xff0c;否则会出现异常。 2.Android不允许在子线程里进行UI操作&#xff0c;对于该情况&#xff0c;Android提供了一套异步消息处理机制&#xff0c;完美解决在子线程中进行…

C#中HP-Socket通信组件详解

概念 HP-Socket 是国产的TCP、UDP和HTTP 通信框架&#xff0c;包含服务端、客户端和 Agent 组件&#xff0c;提供 C/C、C#、Java、Python 等多种编程语言接口。 与传统TCP通讯区别的是HP-Socket 对通信层做到了完全封装&#xff0c;程序不必关注通信层的任何细节&#xff1b;H…

mail发送的内容显示为附件的解决办法

利用命令: cat data.mail | mail -v -s "mail test" xxxqq.com 发送的内容在收件箱中显示为附件tcmimi.xxx.bin. 这是因为mail期望文件输入的是unix格式的文本,也就是说换行符使用\n而不是\r\n,如果文本中包含\r(使用set list,显示为^M),这种情况下mail会认为该文件…

【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)

目录 一、函数 cv.findContours 二、轮廓层级(返回参数hierarchy) 三、轮廓寻找方式 1. RETR_LIST 2. RETR_TREE

基于C#的ico图标制作与应用

一、简介 ICO是什么 ICO 是 Windows 开发的一种图标格式&#xff0c;是一种可以存储多张图案、多尺寸、多色板的图标文件。 一般用IcoFX软件来创建或修改ico文件。 点击下载 Ico文件创建与应用 1.单击打开按钮&#xff0c;选择一个图像文件&#xff0c;确定后一般出现以下…

第5章--高级数据管理

5.1 数值和字符处理函数 常用的数学函数 统计函数 例子&#xff1a; > x <- c(1,2,3,4,5,6,7,8) > mean(x) [1] 4.5 > sd(x) [1] 2.44949 默认情况下&#xff0c;函数scale()对矩阵或数据框的指定列进行均值为0、标准差为1的标准化&#xff1a; newdata <- scal…

在思科无线控制器上查看5GHz和2.4GHz的客户端数量

在图形界面下找了好长时间也没有看到在哪里&#xff0c;在CLI界面下找到了相应的命令&#xff0c;命令如下&#xff1a; (Cisco Controller) >show client ap 802.11a allMAC Address AP Id Status WLAN Id Authenticated ----------------- ------ -…

【图像处理】——实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(connectedComponentsWithStats()函数和connectedComponents()函数)

目录 一、cv2.connectedComponents() 函数原型: 输入参数解析: 返回参数解析: 二、cv2.connectedC

Halcon阈值分割方法简析

1. 基于直方图的自动阈值分割 1.1 关键算子 auto_threshold(Image : Regions : Sigma : )&#xff1a;使用多阈值分割单通道图像。 首先&#xff0c;计算图像的灰度直方图。 然后&#xff0c;使用标准差为Sigma的一维高斯滤波器对直方图进行滤波。 进而&#xff0c;从直方图中…

GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站

GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站 引文 如果你已经购买了Nuand&#xff08;官方&#xff09;BladeRF x40&#xff0c;那么就可以在上面运行OpenBTS并可以输入一些指令来完成一些任务。一般来说HackRF&#xff0c;是一款覆盖频率最宽的SDR板卡。它几乎所有的信息…

夜深人静,想规划一下短期

截止写到这里的时候&#xff0c;已经是农历的十一月初六了&#xff0c;算算时间&#xff0c;距离过年也不太遥远了。就只有短短50多天左右。 很多事想做没有时间&#xff0c;很多程序要改&#xff0c;没有时间&#xff1b;很多想法想付诸行动&#xff0c;总是半途而废。时间久这…