天天看點

Spring加載配置檔案的三種方式

1、把applicationContext.xml直接放在WEB-INF/classes下,spring會采用預設的加載方式

2、采用在web.xml中配置ContextLoaderListenera或ContextLoaderServlet指定加載路徑方式。

它們兩個有着同樣的功能,都實作在了org.springframework.web.context.ContextLoader類,都要定義contextConfigLocation參數。差別在于listener不能在Servlet 2.2相容的容器中使用。自從Servelt 2.4規範,listener被要求在web應用啟動後初始化。web.xml初始化的時候,listerner會檢查contextConfigLocation參數。如果不存在的話,它将預設使用/WEB-INF/applicationContext.xml。如果它存在,它就會用預先定義的分隔符(逗号,分号和空格)分開分割字元串(<param-value></param-value),并将這些值作為應用上下文将要搜尋的位置。

代碼

<context-param>  

    <param-name>contextConfigLocation</param-name>  

    <param-value>  

      /WEB-INF/daoContext.xml,   

     /WEB-INF/config/appContext1.xml,   

    /WEB-INF/config/appContext2.xml   

</param-value>  

</context-param>  

<listener>  

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  

</listener>  

<!-- 另一種是使用ContextLoaderServlet   

<servlet>  

    <servlet-name>context</servlet-name>  

    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>  

    <load-on-startup>1</load-on-startup>  

</servlet>  

-->  

3 通過ClassPathXmlApplicationContext或XmlWebApplicationContext代碼動态加載

 一:XmlBeanFactory 引用

  Resource resource = new ClassPathResource("appcontext.xml");

  BeanFactory factory = new XmlBeanFactory(resource);

  二:ClassPathXmlApplicationContext 編譯路徑

  ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:appcontext.xml");

  ApplicationContext factory=new ClassPathXmlApplicationContext("appcontext.xml"); // src目錄下的

  ApplicationContext factory=new ClassPathXmlApplicationContext("conf/appcontext.xml"); // src/conf 目錄下的

  ApplicationContext factory=new ClassPathXmlApplicationContext("file:G:/Test/src/appcontext.xml");

  三 : 用檔案系統的路徑

  ApplicationContext factory=new FileSystemXmlApplicationContext("src/appcontext.xml");

  //使用了 classpath: 字首,作為标志, 這樣,FileSystemXmlApplicationContext 也能夠讀入classpath下的相對路徑

  ApplicationContext factory=new FileSystemXmlApplicationContext("classpath:appcontext.xml");

  ApplicationContext factory=new FileSystemXmlApplicationContext("file:G:/Test/src/appcontext.xml");

  ApplicationContext factory=new FileSystemXmlApplicationContext("G:/Test/src/appcontext.xml");

  四: XmlWebApplicationContext 是專為Web工程定制的。

  ServletContext servletContext = request.getSession().getServletContext();

  ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );