Spring MVC那些事之ApplicationContext使用

来源:互联网 发布:php官方手册 编辑:程序博客网 时间:2024/06/14 07:17

     ApplicationContext 是 BeanFactory 接口的子接口,处于 context 包下。 ApplicationContext 允许以声明式方式操作容器,无须手动创建。可利用如 ContextLoader 的支持类,在 Web 应用启动时自动创建 ApplicationContext。当然,也可以采用编程方式创建 ApplicationContext。ApplicationContext包括BeanFactory的全部功能,因此建议优先使用ApplicationContext。除非对于某些内存非常关键的应用,才考虑使用 BeanFactory。

     在ApplicationContext实例化后,同样通过getBean方法从ApplicationContext容器中获取装配好的Bean实例以供使用。
与BeanFactory不同的是,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。

     对于ApplicationContext,有主要三种加载配置文件的方式来进行实例化:

     1.使用classPathXmlApplicationContext,从类路径classpath中寻找xml配置文件,找到并装载完成ApplicationContext的实例化工作:

     ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");

     classpath:前缀是不需要的,默认就是指项目的classpath路径下面。如果要使用绝对路径,需要加上file:前缀表示这是绝对路径;在根据classpath查找文件时,一般有classpath:和classpath*:两种方式,前者在未找到配置文件时抛出异常,而后者直接忽略。

     2.使用FileSystemXmlApplicationContext,从指定的文件系统路径下寻找指定的xml配置文件,找到并装载完成ApplicationContext的实例化工作:

     ApplicationContext ctx=new  FileSystemXmlApplicationContext("ApplicationContext.xml");

     这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况,在获取失败时抛出异常。在查找配置文件时,没有盘符的是项目工作路径,即项目的根目录;有盘符表示的是文件绝对路径.如果要使用classpath路径,需要前缀classpath。

     3.使用WebApplicationContextUtils类的getRequiredWebApplicationContext方法可在JSP与Servlet中取得IoC容器的引用,从web应用(/WEB-INF/applicationContext.xml)中寻找指定的xml配置文件,找到并装载完成ApplicationContext的实例化工作,这是为Web工程量身定制的,

     ServletContext servletContext = request.getSession().getServletContext();    
     ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

     在加载配置文件时,如果未找到返回null。

     在上面三种方法中默认使用ClassPathXmlApplicationContext,Web项目的启动是由相应的Web服务器负责的,因此,在Web项目中ApplicationContext容器的实例化工作最好交给Web服务器来完成。

     一般来说,对于ApplicationContext,一种通过org.springframework.web.context.ContextLoaderListener的listener的方法进行配置,一种通过org.springframework.web.context.ContextLoaderServlet的 servlet方法进行配置。其中,ContextLoaderListener所初始化的容器,我们称之为Root WebApplicationContext。在配置过程中,ApplicationContext实例,如果需要指定配置文件位置,可通过context-param加以指定。servlet容器启动时加载组件的顺序来看,Listener组件是优先于Servlet组件的。基于Servlet方式的加载方案主要是为了兼容Servlet2.3及以下规范的Servlet容器。因此,基于Listener方式启动Spring容器是目前的主流选择。

          

0 0