详见: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

Spring中ApplicationContext加载机制的更多相关文章

  1. Spring中ApplicationContext加载机制和配置初始化

    Spring中ApplicationContext加载机制.        加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet.        ...

  2. 自制spring中bean加载机制,仅做笔记自用

  3. ExtJs中动态加载机制研究(转)

    觉得写的太好了,怕弄丢了,转一下:http://extjs.org.cn/node/659 昨天我们team对于extjs的动态加载机制做了些深入研究,这里先share下controller加载的结果 ...

  4. Spring中查看加载配置文件中 加载类的个数及详情

    断点到: org.springframework.beans.factory.support.DefaultListableBeanFactory#getBeanDefinitionCount 显示该 ...

  5. tp中model加载机制

    $user_model = D('User'); 如果当前模块下面有UserModel,就优先使用当前模块下的UserModel.如果当前模块下没有UserModel,就回去Common模块下找Use ...

  6. Node.js中模块加载机制

    1.模块查找规则-当模块拥有路径但没有后缀时:(require(‘./find’)) require方法根据模块路径查找模块,如果是完整路径,直接引入模块: 如果模块后缀省略,先找同名JS文件,再找同 ...

  7. Spring Boot 扩展点应用之工厂加载机制

    Spring 工厂加载机制,即 Spring Factories Loader,核心逻辑是使用 SpringFactoriesLoader 加载由用户实现的类,并配置在约定好的META-INF/spr ...

  8. Spring IOC - 控制反转(依赖注入) - 懒加载机制

    懒加载机制 Spring默认会在容器初始化的过程中,解析xml,并将单例的bean创建并保存到map中,这样的机制在bean比较少的时间问题不大,但一旦bean非常多时,Spring需要在启动的过程中 ...

  9. Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)

    千里之行,始于足下.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https://www.you ...

随机推荐

  1. spring项目中service方法开启线程处理业务的事务问题

    1.前段时间在维护项目的时候碰到一个问题,具体业务就是更新已有角色的资源,数据库已更新,但是权限控制不起效果,还是保留原来的权限. 2.排查发现原有的代码在一个service方法里有进行资源权限表的更 ...

  2. [补档]Cube

    Cube 题目 给你一个n×m的棋盘,有一个1×1×2的长方体竖直放在(1,1)上,你可以将其在棋盘上滚动,你的目标是让其竖直放在(n,m)上,问至少需要多少次操作.(放倒.竖直.翻滚) INPUT ...

  3. Open-Falcon第七步安装报警模块(小米开源互联网企业级监控系统)

    sender调用各个公司提供的mail-provider和sms-provider,按照某个并发度,从redis中读取邮件.短信并发送,alarm生成的报警短信和报警邮件都是直接写入redis即可,s ...

  4. Open-Falcon第五步安装Query(小米开源互联网企业级监控系统)

    安装Query query组件,绘图数据的查询接口,query组件收到用户的查询请求后,会从后端的多个graph,查询相应的数据,聚合后,再返回给用户. cd /usr/local/open-falc ...

  5. yhTriangle_LinkQueue(队列实现杨辉三角)

    #include"LinkQueue.h" void yhTriangle(int n) { LinkQueue<int> A; int s,t; A.Inqueue( ...

  6. Problem of Uninstall Cloudera: Can't Add Hdfs and Reported Cannot Find CDH's bigtop-detect-javahome

    [toc] 1. Problem We wrote a shell script to uninstall Cloudera Manager(CM) that run in a cluster wit ...

  7. 【性能测试工具】- Siege

    优点:比http_load好用,因为相同的url.txt文件在httpload不好使,所以在易用性上httpload不如siege,仍需进一步调研. 缺点:安装过程中,不能自动创建siege.log文 ...

  8. mysqli数据库连接

    /* * 连接数据库的mysqli函数库 * 使用的是过程化的风格编码 */header('content-type:text/html;charset=utf-8');// 获取数据库连接$link ...

  9. JQuery 思维导图

    JQuery 就这么点内容,但是他能做出很多很多的效果.

  10. HTML颜色代码表/颜色名(网摘)

    HTML颜色代码表 原文出处:[颜色代码] HTML颜色名 source link: http://www.runoob.com/html/html-colornames.html