spring中applicationContext.xml在web.xml中的配置路徑說明
在web專案裡使用了spring框架,我們經常需要在web容器啟動時自動初始化spring容器。要想實現這一功能,就需要在web.xml中增加一個上下文引數,指定spring的配置檔案applicationContext.xml。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/config/applicationContext.xml</param-value>
</context-param>
引數名稱contextConfigLocation是固定屬性名,不可寫錯。為什麼呢,
/WEB-INF/classes/config/applicationContext.xml說明applicationContext.xml是在原始碼下的config目錄下的。
光宣告配置檔案的路徑是不夠的,還要宣告spring框架的web上下文載入監聽器。配置Listener
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</
</listener>
監聽器設定好後,啟動web容器時,就會啟動ContextLoaderListener的方法contextInitialized() 。而在方法contextInitialized() 中有以下程式碼:
- publicvoid contextInitialized(ServletContextEvent event) {
- this.contextLoader = createContextLoader();
- if (this.contextLoader == null) {
- this.contextLoader =
- }
- this.contextLoader.initWebApplicationContext(event.getServletContext());
- }
- static {
- // This is currently strictly internal and not meant to be customized
- // by application developers.
- try {
- //這一句會去載入同在此包下的一個properties檔案的值(ContextLoader.properties)
- ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, ContextLoader.class);
- defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);
- }
- catch (IOException ex) {
- thrownew IllegalStateException("Could not load 'ContextLoader.properties': " + ex.getMessage());
- }
- }
ContextLoader.properties的屬性檔案中有org.springframework.web.context.WebApplicationContext=org.springframework.web.context.support.XmlWebApplicationContext
可以通過屬性檔案反射生成XmlWebApplicationContext,而在XmlWebApplicationContext中有這個常量
publicstaticfinal String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";
說明spring的web預設載入spring檔案的啟動位置了,是在web-inf下,如果想指定新的目錄,可以在web的上下文引數中指定路徑,那麼在哪個引數中指定呢。
接下來我們繼續看ContexLoader類,裡面有一個常量。
publicstaticfinal String CONFIG_LOCATION_PARAM = "contextConfigLocation";
而XmlWebApplicationContext物件正是呼叫了這個引數去設定啟動位置
- wac.setConfigLocation(servletContext.getInitParameter(CONFIG_LOCATION_PARAM));
再往上看XmlWebApplicationContext繼承的AbstractRefreshableConfigApplicationContext類中的setConfigLocation方法將此抽象類中的String[] configLocations值填充
並在AbstractRefreshableConfigApplicationContext類中我們看到spring對預設啟動檔案位置和配置啟動檔案位置的支援
- protected String[] getConfigLocations() {
- return (this.configLocations != null ? this.configLocations : getDefaultConfigLocations());
protected String[] getConfigLocations() {
return (this.configLocations != null ? this.configLocations : getDefaultConfigLocations());
}
1. 首先 classpath是指 WEB-INF資料夾下的classes目錄
2. classpath 和 classpath* 區別:
classpath:只會到你的class路徑中查詢找檔案;
classpath*:不僅包含class路徑,還包括jar檔案中(class路徑)進行查詢.
如果applicationContext.xml配置檔案存放在WEB-INF下面
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext*.xml</param-value>
</context-param>
如果applicationContext.xml配置檔案存放在src目錄下
context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
需要注意的是,部署到應用伺服器後,src目錄下的配置檔案會和class檔案一樣,自動copy到應用的 classes目錄下,spring的 配置檔案在啟動時,載入的是web-info目錄下的applicationContext.xml, 執行時使用的是web-info/classes目錄下的applicationContext.xml。因此,不管applicationContext.xml配置檔案存放在src目錄下,還是存放在WEB-INF下面,都可以用下面這種方式來配置路徑:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/applicationContext*.xml</param-value> </context-param>
當有多個配置檔案載入時,可採用下面程式碼來配置:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:conf/spring/applicationContext_core*.xml, classpath*:conf/spring/applicationContext_dict*.xml, classpath*:conf/spring/applicationContext_hibernate.xml, ...... </param-value> </context-param>
也可以用下面的這種方式:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:**/applicationContext-*.xml</param-value> </context-param>
"**/"表示的是任意目錄;
"**/applicationContext-*.xml"表示任意目錄下的以"applicationContext-"開頭的XML檔案。
Spring配置檔案最好以"applicationContext-"開頭,且最好把所有Spring配置檔案都放在一個統一的目錄下,也可以分模組建立。
相關推薦
idea中applicationContext-trans.xml中的Cannot resolve bean 'dataSource'...的問題解決
問題如下: (applicationContext-trans.xml中的部分截圖) 先了解問題是怎麼出現的: 此處的dataSource是在applicationContext-dao.xml中配置的,如下: 本來是想直接引用過來,沒想到會出現無法解析的錯誤 問題解決: 原因是:因為sp
Spring之AOP在XML中的配置方法
字段 object 代理 [] ger 編程 調用 加載器 bsp AOP 即 Aspect Oriental Program 面向切面編程 先來一個栗子: <aop:config> <aop:pointcut id="
idea中applicationContext-dao.xml檔案中Cannot resolve file***** :spring xml model validation問題
訪問不了classpath下的資料夾中的檔案 解決辦法如下:(問題出在我建立的resources資料夾是一個普通的資料夾) 1、本來是普通的資料夾 2、ctrl+shift+alt+s開啟如下介面: 3、點選Test Resources 4、apply-->OK&n
【Spring筆記三】Spring中Bean(XML方式配置)
我們可以把 Spring 看作一個大型的工廠,而 Spring 容器中的 Bean 就是該工廠的產品。要想使用這個工廠生產和管理Bean,就需要在配置檔案中告訴它需要哪些 Bean,以及需要使用何種方法將這些 Bean 裝配到一起。 首先,分清楚 JavaBean 和
spring boot專案中 mybatis-config.xml的配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.o
spring boot專案中 mybatis-config.xml 的配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.o
Spring中ApplicationContext載入機制和配置初始化
Spring中ApplicationContext載入機制。 載入器目前有兩種選擇:ContextLoaderListener和ContextLoaderServlet。 這兩者在功能上完全等同,只是一個是基於Servlet2.3版本中新引入
spring上下文在web.xml中的配置
<!-- Spring配置檔案開始 --> <context-param> <param-name>contextConfigLocation</param-name> &l
spring mvc 在Web.xml中自動掃描Spring的配置檔案及resource時classpath*:與classpath:的區別
首先在web.xml中配置監聽器listener,讓spring進行自動獲取。具體加入的程式碼如下: <listener><listener-class>org.springframework.web.context.ContextLoad
01 Maven構建的項目中,把.xml等配置文件添加到編譯目錄
build 文件 構建 main %20 sources 更新 目錄 如果 Maven構建的項目,默認只會把src/main/resources目錄下的xml配置文件添加到編譯目錄。 如果需要把src/main/java目錄下的xml配置文件也添加到編譯目錄,需要在pom.
Android studio中git使用及git配置路徑
原文地址: http://blog.csdn.net/asdf717/article/details/54290796 非常感謝原作者 此文很詳細 本人看到後壓抑不住內心的激情 想轉載 為以後自己忘記好找而轉 也為廣大新手而轉 一. Android Stutio配置git set
Hibernate中hibernate.cfg.xml核心配置檔案配置
<property>行為標籤,name需要操作的物件 //dialect表示資料庫的方言,例org.hibernate.dialect.MySQLDialect <property
spring專案中,web.xml中的 ContextLoaderListener監聽器的原理
</pre><pre class="java" name="code">建立監聽器和ServletContext的code:</pre><pre class="java" name="code"><context-par
tomcat中的server.xml檔案配置了URIEncoding="UTF-8"需要注意的問題
1. get請求傳遞中文時本地連正式庫訪問都正常,正式環境下單獨訪問報錯 程式碼: 請求:project/projectInfo/export/?cks=’專案型別 public String export(ProjectIn foproje
java開發中常用的xml,properties配置
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http
maven 打war包報異常(web.xml 以及jsp js css不在war包中),以及pom.xml 檔案配置
一、maven war 打包異常資訊 異常資訊: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode
android程式中的AndroidManifest.xml中的uses-feature詳解
AndroidManifest.xml中的uses-feature 在Android的manifest檔案: 用於指定android程式,是否需要某種硬體或軟體資源/功能。 uses-feature的語法 <uses-feature  
Android學習(32)在Acticity中獲取strings.xml中的
strings.xml <resources> <string name="app_name">androidtest2</string> <string name="size_s">S</s
Maven:如何在構建中修改pom.xml中version版本號
我們在不斷的java版本釋出過程中,每個版本的版本號都需要手動設定,以標識該版本號,是否能通過其他方式來解決呢 經過不斷的查詢發現Maven可以用mvn命令修改pom.xml中的version 命令如下:mvn versions:set -DartifactId=frame
Android stutio 中怎麼將XML中檔案快速findById——Android Layout ID Converter外掛
我們在寫Android佈局檔案時,在XML中寫好佈局,然後會在MainActivity中findById例項化,如果少了還好,但一個佈局有幾十個控制元件呢? 在Android stutio中這些程式碼不必手敲出來的。 這需要用到Android Layou